Bitset上的按位OR给出了错误的答案

时间:2017-08-25 03:33:04

标签: c++ bit-manipulation bitset std-bitset

#include<bits/stdc++.h>
using namespace std;
int main(){
 bitset<5> num=01000;
 bitset<5> n=00000;
 bitset<5> result;
 result=(n|num);
 cout<<result;
}

答案应为1000 但它显示00000

3 个答案:

答案 0 :(得分:1)

01000octal整数字面值,其值为512,其中5个最低有效位为0.与00000相同

因此numn都是0

要将位集设置为01000二进制,您可以使用

答案 1 :(得分:0)

如果要分配二进制数,则可以用双引号括起来:

std::string binary_number = "1000";
std::bitset<5> num(binary_number);
std::bitset<5> n("0");
std::bitset<5> result;
result = (n | num);
std::cout << result;

但如果您不想使用双引号括起来,那么您可以这样做:

std::bitset<5> num = 8;
std::bitset<5> n = 0;
std::bitset<5> result;
result = (n | num);
std::cout << result;

答案 2 :(得分:0)

二进制文字有专门的概念(since C++14)0b01000而非01000

#include <bitset>

int main(int argc, char* argv[])
{
    std::bitset<5> num = 0b01000;
    std::bitset<5> n = 0b00000;
    std::bitset<5> result;

    result = (n | num);

    std::cout << result << std::endl; // -> 01000

    return 0;
}