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