Побитовое ИЛИ на Битсете дает неправильный ответ

#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 ответа

Решение

Двоичные литералы имеют специальное понятие (начиная с 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;
}

01000 является восьмеричной целочисленной константой, значение которой равно 512, причем 5 младших значащих битов равны 0. 00000

Следовательно, и num, и n будут 0

Чтобы установить бит в 01000 бинарный вы можете использовать bitset<5> num("01000") начиная с [C++11] или bitset<5> num(0b01000) начиная с C++ 14, или просто использовать bitset<5> num(0x10)

Если вы хотите назначить двоичные числа, вы можете заключить их в двойные кавычки:

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;
Другие вопросы по тегам