清华大学出版社 TSINGHUA UNIVERSITY PRESS 0000000000111101 (&)lll10 0000000000111100 a的最后一个二进位变成0。但如果将C源程序移植 到以32位存放一个整数的计算机系统(如ⅴAX 11780)上,由于一个整数用4个字节(32位表示), 想将最后一位变成0就不能用a&017776了。读者 可以自己算一下,当a=017776543603时, a&017776的结果是什么? 为了适应以32位存放一个整数的计算机系统,应 改用 ·a&037777777776
• 0000000000111101 • (&)1111111111111110 • 0000000000111100 • a的最后一个二进位变成0。但如果将C源程序移植 到以32位存放一个整数的计算机系统(如VAX 11/780)上,由于一个整数用4个字节(32位表示), 想将最后一位变成0就不能用a&0177776了。读者 可以自己算一下,当a=017776543603时, a&0177776的结果是什么? • 为了适应以32位存放一个整数的计算机系统,应 改用 • a & 037777777776
清华大学出版社 TSINGHUA UNIVERSITY PRESS 这样改动使移植性差了,可以改用 a=a&~1 它对以16位和以32位存放一个整数的情况都适用, 不必作修改。因为在以2个字节存储一个整数时, 1的二进制形式为00000000001~1是1 l10~1不等于-1,弄清~运算符和负 号运算符的不同)。在以4个字节存储一个整数 时,~1是110 ~运算符的优先级别比算术运算符、关系运算符 逻辑运算符和其他位运算符都高,例如:~a&b, 先进行~a运算,然后进行&运算
• 这样改动使移植性差了,可以改用 a=a&~1 • 它对以16位和以32位存放一个整数的情况都适用, 不必作修改。因为在以2个字节存储一个整数时, 1的二进制形式为0000000000000001,~1是111111 • 1111111110(注意~1不等于-1,弄清~运算符和负 号运算符的不同)。在以4个字节存储一个整数 时,~1是11111111111111111111111111111110。 • ~运算符的优先级别比算术运算符、关系运算符、 逻辑运算符和其他位运算符都高,例如:~a&b, 先进行~a运算,然后进行&运算