n & 0177
Во-первых, обратите внимание, что 0177 является восьмеричным входом, аналог двоичного 1111111
= 127 в десятичном виде.
Но когда вы делаете n & что-то, применяются продвижения аргументов по умолчанию, и 127 преобразуется к типу n
, что означает, что он конвертируется во что-то вроде 0000000 0000000 0000000 01111111
- предполагая, что sizeof(typeof(n)) = 4
.
Таким образом, n & 0177 будет конвертировано в число, которое сохраняет 1 только на самом низком 7 битов, где n было 1.
Позаботьтесь и о случае, когда речь идет о бигендии и лондонах.