欢迎来到天天文库
浏览记录
ID:45172412
大小:1.43 MB
页数:21页
时间:2019-11-10
《《位运算及应用》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、BitwiseOperation位运算及应用程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算就是直接对整数在内存中的二进制位进行操作6(10)110(2)11(10)1011(2)......0110......1011and/&00102(10)10(2)(1)什么是位运算a&b aandba
2、b aorba^b axorb~a notaa<>b ashrbCP(2)位运算的操作符定义两个符号#和@,这两个符号互为逆运算也就是说(x#y)@y=xx<-x#yy
3、<-x@yx<-x@ya=a+b;b=a-b;a=a-b;a:=axorb;a=a^b;b:=axorb;b=a^b;a:=axorb;a=a^b;(3)位运算的一个简单运用var a:word;begin a:=100; a:=nota; writeln(a);end.#includeintmain(){ unsignedshorta=100; a=~a; printf("%d",a); return0;}(4)not~操作...000
4、010110...001011000a:=ashl2;a=a<<2;a=10110(2);a=54465(10);a=10110(2);a=54465(10);(5)shlshr<<>>去掉最后一位(101101->10110) xshr1在最后加一个0 (101101->1011010) xshl1在最后加一个1 (101101->1011011) xshl1+1把最后一位变成1(101100->101101) xor1把最后一位变成0(101101
5、->101100) xor1-1最后一位取反(101101->101100) xxor1把右数第k位变成1(101001->101101,k=3) xor(1shl(k-1))把右数第k位变成0(101101->101001,k=3) xandnot(1shl(k-1))右数第k位取反(101001->101101,k=3) xxor(1shl(k-1))取末三位(1101101->101) xand7取末k位(1101101->1101,k=5)
6、 xand(1shlk-1)取右数第k位(1101101->1,k=4) xshr(k-1)and1把末k位变成1 (101001->101111,k=4) xor(1shlk-1)末k位取反(101001->100110,k=4) xxor(1shlk-1)把右边连续的1变成0 (100101111->100100000) xand(x+1)把右起第一个0变成1(100101111->100111111) xor(x+1)把右边连续的0变成1 (11011
7、000->11011111) xor(x-1)取右边连续的1 (100101111->1111) (xxor(x+1))shr1去掉右起第一个1的左边(100101000->1000) xand(xxor(x-1))(6)位运算的常见变换操作(7)位运算的简单运用同样假设x是一个32位整数。我们需要查找x在二进制下,1的个数。比如,初始时x为108,那么最后c就变成了4,它表示108的二进制中有4个1。programfind;var i,x,c:longint;begin
8、readln(x); c:=0; fori:=1to32do begin c:=c+xand1; x:=xshr1; end; writeln(c);end.intmain(){intx,c=0;scanf("%d",&x);for(i=1;i<=32;i++){if(x&1==1)c++;x=x>>1;}printf("%d",c);return0;}...001101100108(10)同样假设x是一个32位整数。经过下面5次赋值后,x的值就是原数的二进制表示中数字1的个数。x:=
9、(xand$55555555)+((xshr1)and$55555555);x:=(xand$33333333)+((xshr2)and$33333333);x:=(xand$0F0F0F0F)+((xshr4)and$0F0F0F0F);x
此文档下载收益归作者所有