这个按位AND运算符如何屏蔽该数字的低七位?

Gee*_*eek 23 c bit-manipulation bit bitwise-operators

我正在阅读Brian Kernigan和Dennis Ritchie 的C编程语言.以下是关于按位AND运算符的说法:

按位AND运算符&通常用于屏蔽某些位,例如,

    n = n & 0177 
Run Code Online (Sandbox Code Playgroud)

将低7位的所有值设置为零n.

我不太清楚它是如何屏蔽低七位的n.请有人澄清一下吗?

das*_*ght 31

数字0177是表示下面二进制模式的八进制数:

0000000001111111
Run Code Online (Sandbox Code Playgroud)

当你AND使用按位运算时&,结果只保留原始位1在"掩码" 中设置的位; 所有其他位变为零.这是因为"AND"遵循这条规则:

X & 0 -> 0 for any value of X
X & 1 -> X for any value of X
Run Code Online (Sandbox Code Playgroud)

例如,如果你AND 01770545454,你得到

0000000001111111 -- 0000177
0101010101010101 -- 0545454
----------------    -------
0000000001010101 -- 0000154
Run Code Online (Sandbox Code Playgroud)


oua*_*uah 6

在C中,前缀的整数文字0是八进制数,因此0177是八进制数.

每个八进制数字(的值07)被表示为3位,并且7是用于每个数字的最大价值.因此7,八进制值表示3位设置.


Sha*_*our 5

由于0177是八进制文字,每个八进制数是3三位,所以以下二进制等价:

7  = 111
1  = 001
Run Code Online (Sandbox Code Playgroud)

这意味着0177001111111二进制.