当前位置:  开发笔记 > 编程语言 > 正文

ANSI C K&R的按位运算符

如何解决《ANSICK&R的按位运算符》经验,为你挑选了1个好方法。

在作者K&R的ANSI C第49页中,作者说

x = x & ~077 将最后六位设置x为零.注意,x & ~077它与字长无关,因此例如优选x & 0177700假定x为16位量.

我的问题是为什么作者认为x为16位数而0177700总共为21位?当我计算0177700(例如177700)的位数时,我应该忽略前0位吗?

其次,这段经文说使用~077更灵活和有用,因为它可以应用于任何x值,无论其大小如何?



1> unwind..:

0不应计算八进制文字中的前导,这只是语法的一部分(不管前导零应该计算在内).0177700因为最重要的八进制数是1,所以它适合于16位.该值等于0xffc0显然是16位值.

是的,使用倒置的小文字稍微更灵活,因为它在字面值中编码的信息较少.

如果要清除整数的最低位,请执行

x &= ~1u;

更灵活,因为它在具有16位整数的平台上的工作方式与在32位平台上的工作方式相同,但更明确

x &= 0xfffeu;

它不会,因为它假设16位并且不为位16到31提供屏蔽位,它们是否存在.

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有