Bit manipulation 使用位操作的位屏蔽&;

Bit manipulation 使用位操作的位屏蔽&;,bit-manipulation,bit,Bit Manipulation,Bit,我的课本上说 “按位AND运算符&通常用于屏蔽某些位集,例如 n=n&0177; 将n的低阶7位设置为零。” 但是,根据我的理解,0177的二进制形式是101010001,因此操作n=n&0177应该保留从右侧开始的n的第一、第五、第七和第九位,并将所有其他位设置为零 有人能指出我在理解这一点上哪里是错的吗?除了0177的二进制表示之外,我相信你的理解是正确的。如果这是一个十进制数,它将是01111111,如果它是十六进制数(我怀疑是),不要忘记0x前缀!然后它是101110111,因此它将保留

我的课本上说

“按位AND运算符&通常用于屏蔽某些位集,例如 n=n&0177; 将n的低阶7位设置为零。”

但是,根据我的理解,0177的二进制形式是101010001,因此操作n=n&0177应该保留从右侧开始的n的第一、第五、第七和第九位,并将所有其他位设置为零


有人能指出我在理解这一点上哪里是错的吗?

除了0177的二进制表示之外,我相信你的理解是正确的。如果这是一个十进制数,它将是01111111,如果它是十六进制数(我怀疑是),不要忘记0x前缀!然后它是101110111,因此它将保留不同的位。不知道你从哪里得到101010001。如果这不合理,请告诉我。

如评论中所述,如果0177是八进制(以8为基数,每位数3位)数字,它将起作用

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

var n=0177;//n现在包含十进制值127
所以八进制0177==二进制01111==十进制127


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

0177是八进制常量。添加语言标签将允许我们为您提供指向语言规范相应部分的链接。如果原始表示形式为八进制,则为
0111111
,十进制表示形式为
10110001