为什么bitset函数没有为二进制字符串(如1110或1011)返回正确的十进制值?

Mid*_*hun -2 c++ string binary bitset

这是我的代码,它采用4个字符串的1和0,并使用bitset函数转换为十进制.它返回所有组合的正确值,除了那些涉及11和10的组合{1110,1010,1011,1111}.对于这些数字,它返回忽略MSB的结果.这是因为1010它给出了2作为答案.

#include<bits/stdc++.h>
using namespace std;
#define ul unsigned long

int main(int argc, char const *argv[])
{
    int bin1=0,bin2=0,choice=0;
    ul x1=0,x2=0;
    //string binary;
    cin>>bin1;
    x1=bitset<4>(bin1).to_ulong();
    cin>>bin2;  
    x2=bitset<4>(bin2).to_ulong();
    cout<<x1<<" "<<x2<<endl;
    return 0;

}
Run Code Online (Sandbox Code Playgroud)

编辑这里是我的结果的快照

在此输入图像描述

读取另一组输入的同一程序的另一个快照,但这次它给出了正确的输出.顺便说一句的11011001是输入和接下来的两个酸橙在输出

在此输入图像描述

Vit*_*meo 6

cout << bitset<4>(1010).to_ulong() << endl;
Run Code Online (Sandbox Code Playgroud)

打印2.


cout << bitset<4>(0b1010).to_ulong() << endl;
Run Code Online (Sandbox Code Playgroud)

打印10.(注意:二进制文字是在C++ 14中引入的)


cppreference文档std::bitset:

bitset( unsigned long val );

构造一个bitset,将第一个(最右边的,最不重要的)M个比特位初始化为val的相应比特值,其中M是无符号长long中的比特数中较小的一个,并且正在构造的比特集中的比特数N .[...]

1010比特表示不是0b1010,它是0b1111110010- 对于比特集来说太大了.这就是为什么你会看到意想不到的结果.