The*_*der 14 c++ binary bitset
为什么这个程序显示以下输出?
#include <bitset>
...
{
std::bitset<8> b1(01100100); std::cout<<b1<<std::endl;
std::bitset<8> b2(11111111); std::cout<<b2<<std::endl; //see, this variable
//has been assigned
//the value 11111111
//whereas, during
//execution, it takes
//the value 11000111
std::cout << "b1 & b2: " << (b1 & b2) << '\n';
std::cout << "b1 | b2: " << (b1 | b2) << '\n';
std::cout << "b1 ^ b2: " << (b1 ^ b2) << '\n';
}
Run Code Online (Sandbox Code Playgroud)
这是输出:
01000000
11000111
b1 & b2: 01000000
b1 | b2: 11000111
b1 ^ b2: 10000111
Run Code Online (Sandbox Code Playgroud)
首先,我认为头文件有问题(我使用的是MinGW)所以我使用MSVCC进行了检查.但它也显示了同样的事情.请帮忙.
NPE*_*NPE 48
尽管外观,但是11111111十进制.1111111110的二进制表示是1010100110001010110001112.在构建时,std::bitset<8>取出其中的八个最低有效位:110001112.
第一种情况类似,除了01100100是八进制(由于前导零).以二进制表示的相同数字是10010000000010000002.
表示值为111111112的bitset的一种方法是std::bitset<8> b1(0xff).
或者,您可以从二进制字符串构造一个bitset:
std::bitset<8> b1(std::string("01100100"));
std::bitset<8> b2(std::string("11111111"));
Run Code Online (Sandbox Code Playgroud)
根据NPE的答案,你正在构建bitsetwith unsigned long,而不是像你期望的那样使用bit.构造它的另一种方法是通过使用string构造函数来指定位,如下所示:
#include <bitset>
#include <cstdio>
#include <iostream>
int main()
{
std::bitset<8> b1(std::string("01100100")); std::cout<<b1<<std::endl;
std::bitset<8> b2(std::string("11111111")); std::cout<<b2<<std::endl;
std::cout << "b1 & b2: " << (b1 & b2) << '\n';
std::cout << "b1 | b2: " << (b1 | b2) << '\n';
std::cout << "b1 ^ b2: " << (b1 ^ b2) << '\n';
getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
单击此处查看输出.