使用位操作的位掩码 &

Bit masking using bit operation &

我的教科书说

"按位与运算符 & 通常用于屏蔽某些位集,例如 n = n & 0177; 将 n 的低 7 位以外的所有位设置为零。"

但是,据我了解,0177的二进制形式是101010001,所以操作n =n & 0177应该保留n的右起第1、5、7、9位,并将其他所有位设置为零。

谁能指出我理解错误的地方?

除了 0177 的二进制表示之外,我相信您的理解是正确的。如果这是十进制数,则为 01111111,如果是十六进制数(我怀疑是),请不要忘记 0x 前缀!然后它是 101110111 所以它会保留不同的位。不确定你从哪里得到 101010001。如果这没有意义,请告诉我。

如评论中所述,当 0177 是八进制(基数 8,每个数字 3 位)数字时它会起作用。

在多种语言中(例如 javascript),前导 0 表示八进制数:

var n = 0177; // n now contains the decimal value 127

所以八进制 0177 == 二进制 01 111 111 == 十进制 127

这(0 前缀表示八进制)也是为什么在 javascript 中 parseInt0809 的月份输入失败的原因,除非你明确指定基数 10。