#include <bitset>
#include <iostream>

int main() {
    std::bitset<8> a = 10101010;
    std::bitset<8> b = 11111111;

    std::cout << (a ^ b);
}

运行以下代码时结果是:

11010101

预期输出为:

01010101

我做错什么了吗?

5

  • 1
    我撤消了您的编辑,因为您应该更改问题以使现有的答案无效。


    – 

  • 2
    这个问题很容易重现,我不认为这是打字错误,而是缺乏对文字类型的了解。投票决定重新开放。


    – 


  • 与问题的二进制文字部分相关:


    – 

  • 3
    10101010被解释为十进制整数,正如其他人所指出的那样。但请注意,它将01010101被解释为八进制整数,这让大多数从未使用过八进制数的 C++ 程序员感到惊讶。所以要小心。


    – 


  • @prapin 这是一个很好的观点 – 在下面的回答中添加了关于它的附注。


    – 


最佳答案
1

使用十进制文字, )来初始化abint1010101011111111

为了使用二进制文字,您需要0b前缀:

#include <bitset>
#include <iostream>

int main() {
    std::bitset<8> a = 0b10101010;
    std::bitset<8> b = 0b11111111;

    std::cout << (a ^ b);
}

输出:

01010101

关于此类文字的更多信息:

附注:

如上所述,您使用的当前值是十进制整数文字。但是
八进制文字


也有
0前缀(不带b
因此,如果您使用例如
初始化,它将被解释为八进制(基数为 8)值。

01010101ab

0