请问C语言教科书里关于按位逻辑与

chenchen413 2011-01-11 01:27:18
C语言教科书里关于按位逻辑与,里面说到有一种用途是把一个数清零。举的例子是找一个数,把原来为1的位,用0来代替,这样逻辑与出来就是0.比如:1101,要得到全0,就用0010去与。我想不通,为什么不直接用0去与呢,偏要绕一个弯,有什么讲究吗?
...全文
183 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
迷糊 2011-01-11
  • 打赏
  • 举报
回复
书本只是给你介绍一些属性和方法的工具,不要死抱着书本不妨。
学习的过程要灵活一些。
既然你都已经知道了【把一个数清零可以用 &0 】的方法,为什么还要死纠着书本不放呢?
书本只是为看书的人介绍了一种【把特定位清零】的方法而已,目的只是让你掌握一种方法。
luciferisnotsatan 2011-01-11
  • 打赏
  • 举报
回复
xor只是清寄存器,C语言里给变量清0,还有额外的mov

int x = 1;
00412A0E mov dword ptr [x],1
x=0;
00412A15 mov dword ptr [x],0
x^=x;
00412A1C mov eax,dword ptr [x]
00412A1F xor eax,dword ptr [x]
00412A22 mov dword ptr [x],eax



[Quote=引用 6 楼 bluesky12312388 的回复:]

引用 5 楼 luciferisnotsatan 的回复:

全部清0,直接赋 0 应该最快了。或者 & 0

谭浩强的书,lz还是趁早当废纸卖了吧

最快的是 xor eax,eax;
1.直接操作内存
2.编译的字节代码比mov eax,0小
3.位操作。
[/Quote]
chenchen413 2011-01-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 bluesky12312388 的回复:]
引用 5 楼 luciferisnotsatan 的回复:

全部清0,直接赋 0 应该最快了。或者 & 0

谭浩强的书,lz还是趁早当废纸卖了吧

最快的是 xor eax,eax;
1.直接操作内存
2.编译的字节代码比mov eax,0小
3.位操作。
[/Quote]
高手。1和2能理解,3是什么意思?mov eax,0不是位操作是字操作吗?
bluesky12312388 2011-01-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 luciferisnotsatan 的回复:]

全部清0,直接赋 0 应该最快了。或者 & 0

谭浩强的书,lz还是趁早当废纸卖了吧
[/Quote]
最快的是 xor eax,eax;
1.直接操作内存
2.编译的字节代码比mov eax,0小
3.位操作。
luciferisnotsatan 2011-01-11
  • 打赏
  • 举报
回复
全部清0,直接赋 0 应该最快了。或者 & 0

谭浩强的书,lz还是趁早当废纸卖了吧
chenchen413 2011-01-11
  • 打赏
  • 举报
回复
哦,我说的书就是谭浩强的c语言。刚才看到书里写的一段,就是我在顶楼说的那个例子。我就琢磨着为什么不直接用0去清0.是另有玄机还是老谭在intall b?呵呵。。。
varding 2011-01-11
  • 打赏
  • 举报
回复
你的书我没看过,如果从你给的信息来看例子给的确不能说明用“位与”的方法清0的好处。上面我说了,需要清除特定几个位的时候这样用,如果整个变量都清0肯定是直接赋值0就行了

比如:0100 1101 ,我想把所有的位都清0,肯定直接赋值0最快
如果只是想清除第0和第2位就需要用这个方法了:

0110 1101 & ~(0000 0101) => 0110 0100
chenchen413 2011-01-11
  • 打赏
  • 举报
回复
汗,为什么移到非技术区了,这不算技术讨论吗?
谢谢楼上,我想问的是,书里说的就是清0,还要绕着弯去清,什么情况下需要这样呢?
varding 2011-01-11
  • 打赏
  • 举报
回复
可以清除特定位,如果用0就全部清0了
比如:1101,我只想清空第0和第2位,单片机常这样来操作寄存器

1101 & ~(0101)

注:~(0101) 就是1010

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧