位运算基础知识

位运算基础知识

ID:46895275

大小:158.50 KB

页数:22页

时间:2019-11-29

位运算基础知识_第1页
位运算基础知识_第2页
位运算基础知识_第3页
位运算基础知识_第4页
位运算基础知识_第5页
资源描述:

《位运算基础知识》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、位运算目录[隐藏1简介进阶介绍进阶介绍二实战简介进阶介绍进阶介绍二实战『编辑本段1简介程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位进行操作。比如,and运算本来是一个逻辑运算符,但整数与整数之间也可以进行and运算。举个例子,6的二进制是110,11的二进制是1011,那么6and“的结果就是2,它是二进制对应位进行逻辑运算的结果(0表示False,1表示True,空位都当0处理):110AND10110010->2由于位运算直接对内存数据进行操作,不盂要转成I•进制,因此处理速度非常快。当然有人会说,这

2、个快了有什么用,计算6and行没有什么实际意义啊。这一系列的文章就将告诉你,位运算到底可以干什么,有些什么经典应用,以及如何用位运算优化你的程序。Pascal和C中的位运算符号下而的a和b都是整数类型,贝叭C语言

3、Pascal语言a&b

4、aandba

5、b

6、aorbaAb

7、axorb~a

8、notaa<

9、ashlba>>b

10、ashrb注意C中的逻辑运算和位运算符号是不同的。520

11、1314=1834,但520

12、

13、1314=1,因为逻辑运算时520和1314都相当于True。同样的,!a和~3也是有区别的。各种位运算的使用===1.and运算===and运算通常

14、用于二进制取位操作,例如一个数and1的结果就是取二进制的最末位。这可以用来判断一个整数的奇偶,二进制的最末位为0表示该数为偶数,最末位为1表示该数为奇数.===2.or运算===o「运算通常用于二进制特定位上的无条件赋值,例如一个数or1的结果就是把二进制最末位强行变成1。如果需耍把二进制最末位变成0,对这个数or1Z后再减一就可以了,其实际意义就是把这个数强行变成最接近的偶数。===3.xor运算===xor运算通常用于对二进制的特定一位进行取反操作,因为异或可以这样定义:0和1异或0都不变,异或1则取反。xor运算的逆运算是它木身,也就是说两次异或同一个

15、数最后结果不变,即(axorb)xorb二a。xor运算可以用于简单的加密,比如我想对我MM说1314520,但怕别人知道,于是双方约定拿我的生日19880516作为密钥。1314520xor19880516=20665500,我就把20665500告诉MM。MM再次计算20665500xor19880516的值,得到1314520,于是她就明白了我的企图。下而我们看另外一个东西。定义两个符号#和@(我怎么找不到那个圈里有个叉的字符),这两个符号互为逆运算,也就是说(x#y)@y=xo现在依次执行F面三条命令,结果是什么?x<-x#yy<-x@yxv・x@y执

16、行了第一句后x变成了x#y。那么第二旬实质就是yv・x#y@y,由于#和@互为逆运算,那么此时的y变成了原来的X。第三句屮x实际上被赋值为(x#y)@x,如果#运算具有交换律,那么赋值后x就变成最初的y了。这三句话的结果是,x和y的位置互换了。加法和减法互为逆运算,并且加法满足交换律。把#换成+,把@换成・,我们可以写出一个不需耍临时变量的swap过程(Pascal)oprocedureswap(vara,b:longint);begina:=a+b;b:=a-b;a:=a-b;end;好了,刚才不是说xor的逆运算是它本身吗?于是我们就有了一个看起来非常诡界

17、的swap过程:procedureswap(vara,b:longint);begina:=axorb;b:=axorb;a:=axorb;end;===4.not运算===not运算的定义是把内存屮的0和1全部取反。使用not运算时要格外小心,你需耍注意整数类型有没有符号。如果not的对彖是无符号整数(不能表示负数),那么得到的值就是它与该类型上界的差,因为无符号类型的数是用00到$FFFF依次表示的。下面的两个程序(仅语言不同)均返回65435ovara:word;begina:=100;a:二nota;writeln(a);end.#include

18、dio.h>intmain(){unsignedshorta=100;a=~a;printf(”%d”,a);return0;}如果not的对象是有符号的整数,情况就不一样了,稍示我们会在“整数类型的储存”小节中提到。===5.shl运算===ashlb就表示把a转为二进制后左移b位(在后而添b个0)。例如100的二进制为1100100,而110010000转成十进制是400,那么100shl2=400。可以看;II,ashlb的值实际上就是a乘以2的b次方,因为在二进制数后添一个0就相当于该数乘以2。通常认为ashl1tba*2更快,因为前者是更底层一些

19、的操作。因此程序中乘以2的操作请尽量用

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。