Как работают побитовые операторы?

Есть выражение n = n & 0177
В данном случае оператор обнуляет в n все разряды, кроме младших семи.
Объясните, откуда взяли 0177 и почему все разряды, кроме, именно, младших семи?
  • Вопрос задан
  • 123 просмотра
Решения вопроса 1
0177 - это число в восьмеричной системе счисления = 0111 1111 в двоичной
Допустим, n = 1111 1010 1010 в двоичной с.с.

1 & 0 = 0
0 & 0 = 0
1 & 1 = 1

тогда получаем:
0000 0111 1111
1111 1010 1010
---------------
0000 0010 1010
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@TheCalligrapher
Литерал 0177 в языке С++ - это восьмеричный целочисленный литерал, который имеет тип int и положительное значение 127 - семь младших битов равны 1, а остальные (старшие) равны 0.

Вы не указали в своем вопросе какой тип имеет n, что делает ваш вопрос несколько бессмысленным (или полностью бессмысленным), но если предположить, что n - это переменная некоего целочисленного типа, то в данном выражении операнды оператора & будут неявно приведены к одному общему целочисленному типу (к одной ширине). Этот процесс называется usual arithmetic conversions (UAC). Если в процессе UAC придется расширить операнд 0177, то он будет дополнен до требуемой ширины дополнительными нулевыми битами в старшей части.

Так образом, даже после такого преобразования операнд 0177 по-прежнему будет представлять собой битовую "маску" из семи единичных битов в младшей части и нулевых битов в старшей части. Оператор & в такой ситуации "сохранит" семь младших битов исходного значения n и обнулит остальные биты.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы