Как вы заметили, оба они делают одно и то же. Позвольте мне сосредоточиться на другой части:
- (1 << 3), взять число 1 (двоичное: 0000 0001) и сместить его на 3 точки влево (двоичное: 0000 1000) </li>
- 8 возьмите число 8 (двоичное: 0000 1000)
Как видите, результатом будет то же двоичное число: 0000 1000
Если мне нужновыберите между этими двумя, я бы выбрал сдвиг, так как это более очевидно, что вы хотите немного. Однако лично я выбрал бы третий вариант при создании этих чисел: 0b0000'1000
0b
обозначает двоичный литерал, доступный с C ++ 14, а '
- это разделитель цифр (такжеC ++ 14), что похоже на пробелы, которые я использовал ранее.
Однако, если честно, я думаю, что вы используете неправильный инструмент для работы, предполагая, что a
является целым числом. std::bitset
создан для выполнения подобных манипуляций с битами. (Даже доступно в C ++ 98)
#include <bitset>
#include <iostream>
int main(int, char**)
{
auto a = std::bitset<8>{};
a.set(3 /*zero based indexing*/);
std::cout << a.to_string() << std::endl;
return 0;
}
Вывод программы: 00001000
Код в компиляторе Explorer
Asкак видите, вы можете очень легко установить биты с помощью метода set
, как если бы это был любой другой контейнер. См. документацию для получения дополнительной информации.