Как составить и сформировать двоичные литералы, например, путем преобразования из десятичной в C++11 / C++14?
int main() {
int x = 3613;
std::cout << "x= " << x << std::endl;
std::string xBin = std::bitset<16>(x).to_string();
std::cout << xBin << std::endl;
unsigned long xDecimal = std::bitset<16>(xBin).to_ulong();
std::cout << xDecimal << std::endl;
std::cout << std::endl << std::endl;
int b01 = 0b11001;
std::cout << "b01= " << b01 << std::endl;
int b02 = 0b1010;
std::cout << "b02= " << b02 << std::endl;
int b03 = b01 + b02;
std::cout << "int b03 = b01 + b02 = " << b03 << std::endl;
return 0;
}
Выход:
x= 3613
0000111000011101
3613
b01= 25
b02= 10
int b03 = b01 + b02 = 35
С двоичными литералами мы можем выполнять обычные арифметические операции, в то время как со строками, полученными с помощью std::bitset<>, это невозможно. Итак... вопрос в том, как "составить" двоичные литералы, например, путем преобразования десятичного числа в двоичное, полученное с использованием std::bitset<>? Ждем вашей помощи. Marco
1 ответ
Решение
Вы не должны оперировать битовыми наборами, конвертируя их в строковые и обратно - здесь не хватает смысла битовых наборов... Вместо этого вы оперируете ими с помощью бинарных операторов: &
, |
, ^
... (так же, как вы бы использовали обычные целые числа).
std::cout << std::bitset<3>(4) << " or "
<< std::bitset<3>(2) << " = "
<< (std::bitset<3>(4) | std::bitset<3>(2)) << std::endl;
Печать: 100 or 010 = 110
Вы можете найти всех операторов на вики: http://en.cppreference.com/w/cpp/utility/bitset