【问题标题】:Bitwise OR on Bitset giving wrong answer [duplicate]Bitset上的按位或给出错误答案[重复]
【发布时间】:2017-08-25 03:33:04
【问题描述】:
#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

【问题讨论】:

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


【解决方案1】:

01000 是一个 octal 整数文字,其值为 512,其中 5 个最低有效位为 0。与 00000 相同

因此numn 都将为0

要将 bitset 设置为 01000 二进制文件,您可以使用

【讨论】:

    【解决方案2】:

    二进制文字有专门的概念(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;
    }
    

    【讨论】:

    • Binary literals have different notion in C++14 在 C++14 之前没有任何二进制文字。 01000 一直是八进制
    • 我就是这个意思。
    • 你写的意思是在 C++ 之前它有另一个错误的概念
    • 我的搞笑英语...
    • 顺便说一句,即使在 pre-C++14 days 中,人们也试图以某种方式指定二进制文字
    【解决方案3】:

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

    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;
    

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 2020-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-01
      • 1970-01-01
      • 2014-11-19
      • 2020-02-16
      相关资源
      最近更新 更多