考虑一下Dennis在C书中给出的如下陈述
按位和运算符&通常用于屏蔽一些位, 例如 N=N& 0177; 将除低阶7位
n以外的所有数据设置为零.
关于位和运算符,我的理解如下:
11010010 & 01101010 = 01000010
也就是说,如果任何操作数中的对应位为0,则设置为0。
但是在上面引用的声明中,它被告知,除了最后的7位外,其他的位都是0。
如果我们在二进制中展开0177,它将是10110001 (8位),所以我们不能说低阶8位。我哪里出错了?
发布于 2017-05-27 16:36:53
引用C11,第6.4.4.1节,(强调地雷)
..。一个八进制常量由前缀可选地紧跟一个数字序列,即通过
7only的数字。..。
因此,整数常量(如0177 )是八进制,与十进制127或十六进制7F相同。二进制表示形式给出了01111111,这是
..。将
n__的低阶7位设置为零。
发布于 2017-05-27 16:35:38
您将掩码转换为177,就好像它是十进制一样。然而,情况并非如此:前导零使它成为一个八进制常数。
因此,它的二进制表示是
01111111正如你所看到的,它遮住了除了下面7以外的所有位元。
在过去,八进制符号在PDP计算机程序员中很受欢迎,因为它让他们更容易“读”二进制代码。现在它已经不那么流行了,在定义二进制掩码时,十六进制符号大多取代了它。
https://stackoverflow.com/questions/44219219
复制相似问题