对两个std::bitset执行异或运算结果异常,请求排查
问题分析与解决
你的问题出在bitset的初始化方式上:你赋值的10101010是十进制整数,不是二进制字面量。
十进制的10101010转换成二进制是10011010001010110011010,取低8位就是11010101——这就是你代码中a实际存储的二进制值。和全1的b(二进制11111111)异或后,结果自然是11010101,和你预期的不符。
要正确初始化你想要的二进制位,有两种方法:
方法1:使用二进制字面量(C++11及以上支持)
在二进制数前加0b前缀,明确告诉编译器这是二进制值:
#include <bitset> #include <iostream> int main() { std::bitset<8> a = 0b10101010; std::bitset<8> b = 0b11111111; std::cout << (a ^ b); }
方法2:使用字符串初始化
直接用字符串形式传入二进制位,bitset会按字符串内容解析:
#include <bitset> #include <iostream> int main() { std::bitset<8> a("10101010"); std::bitset<8> b("11111111"); std::cout << (a ^ b); }
运行以上任意一种代码,都会输出你预期的01010101。
内容的提问来源于stack exchange,提问作者mega_coder
相关产品推荐
相关产品推荐

