在作者K&R的ANSI C第49页中,作者说
x = x & ~077
将最后六位设置x
为零.注意,x & ~077
它与字长无关,因此例如优选x & 0177700
假定x
为16位量.
我的问题是为什么作者认为x为16位数而0177700总共为21位?当我计算0177700(例如177700)的位数时,我应该忽略前0位吗?
其次,这段经文说使用~077
更灵活和有用,因为它可以应用于任何x
值,无论其大小如何?
0
不应计算八进制文字中的前导,这只是语法的一部分(不管前导零应该计算在内).0177700
因为最重要的八进制数是1,所以它适合于16位.该值等于0xffc0
显然是16位值.
是的,使用倒置的小文字稍微更灵活,因为它在字面值中编码的信息较少.
如果要清除整数的最低位,请执行
x &= ~1u;
更灵活,因为它在具有16位整数的平台上的工作方式与在32位平台上的工作方式相同,但更明确
x &= 0xfffeu;
它不会,因为它假设16位并且不为位16到31提供屏蔽位,它们是否存在.