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

chenchen413 2011-01-11 01:27:18
C语言教科书里关于按位逻辑与,里面说到有一种用途是把一个数清零。举的例子是找一个数,把原来为1的位,用0来代替,这样逻辑与出来就是0.比如:1101,要得到全0,就用0010去与。我想不通,为什么不直接用0去与呢,偏要绕一个弯,有什么讲究吗?
...全文
192 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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
一、C语言的产生与发展 C语言是1972年由美国的Dennis Ritchie设计发明的,并首次在UNIX操作系统的 DEC PDP-11 计算机上使用。它由早期的编程语言BCPL (Basic Combind Programming Language)发展演变而来。在1970年,AT&T贝尔实验室的Ken hompson根据BCPL语言设计出较先进的并取名为B的语言,最后导致了C语言的问世。 随着微型计算机的日益普及,出现了许多C语言版本。由于没有统一的标准, 使得这些C语言之间出现了一些不一致的地方。为了改变这种情况,美国国家标准研究所(ANSI)为C语言制定了一套ANSI标准,成为现行的C语言标准。 二、C语言的特点 C语言发展如此迅速, 而且成为最受欢迎的语言之一,主要因为它具有强大的功能。许多著名的系统软件, 如PC-DOS,DBASE Ⅳ都是由C语言编写的。用C语言加上一些汇编语言子程序, 就更能显示C语言的优势了。归纳起来C语言具有下列特点: 1. C是中级语言 它把高级语言的基本结构和语句与低级语言的实用性结合起来。C语言可以象汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。 2. C是结构式语言 结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C 语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。 3. C语言功能齐全 C语言具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。另外C语言也具有强大的图形功能,支持多种显示器和驱动器。而且计算功能、逻辑判断功能也比较强大,可以实现决策目的。 4. C语言适用范围大 C语言还有一个突出的优点就是适合于多种操作系统,如DOS、UNIX,也适用于多种机型。

15,447

社区成员

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

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