位运算基础版(经典).doc

位运算基础版(经典).doc

ID:57180925

大小:50.00 KB

页数:6页

时间:2020-08-05

位运算基础版(经典).doc_第1页
位运算基础版(经典).doc_第2页
位运算基础版(经典).doc_第3页
位运算基础版(经典).doc_第4页
位运算基础版(经典).doc_第5页
资源描述:

《位运算基础版(经典).doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、位操作基础基本的位操作符有与、或、异或、取反、左移、右移这6种,它们的运算规则如下所示:符号描述运算规则&与两个位都为1时,结果才为1

2、或两个位都为0时,结果才为0^异或两个位相同为0,相异为1~取反0变1,1变0<<左移各二进位全部左移若干位,高位丢弃,低位补0>>右移各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移)注意以下几点:1.在这6种操作符,只有~取反是单目操作符,其它5种都是双目操作符。2.位操作只能用于整形数据,其他类型进行位操作会被编译器报错。3.对于移位操作,在微软的VC6.0和VS2008

3、编译器都是采取算术称位即算术移位操作,算术移位是相对于逻辑移位,它们在左移操作中都一样,低位补0即可,但在右移中逻辑移位的高位补0而算术移位的高位是补符号位。如下面代码会输出-4和3。位操作应用1. 位运算的简单应用表达式位运算等价x+y(x

4、y)+(x&y)x-y(x

5、~y)-(~x&y)x^y(x

6、y)-(x&y)x

7、y(x&~y)+yx&y(~x

8、y)-~xx==y(x-y

9、y-x)x!=yx-y

10、y-xx

11、((~x

12、y)&(x-y))//无符号x,y比较x<=y(~x

13、y)&((x^y)

14、~(y-x))//无符

15、号x,y比较2.判断奇偶只要根据最未位是0还是1来决定,为0就是偶数,为1就是奇数。因此可以用if(a&1==0)代替if(a%2==0)来判断a是不是偶数。可以得到如下代码:voidisEven(intn){//判断偶数if((n&1)==0){//注意优先级,位运算优先级很低cout<<"Even"<

16、^运算满足交换律,b^(a^b)=b^b^a。由于一个数和自己异或的结果为0并且任何数与0异或都会不变的,所以此时b被赋上了a的值。3)a^=b就是a=a^b,由于前面二步可知a=(a^b),b=a,所以a=a^b即a=(a^b)^a。故a会被赋上b的值。再来个实例说明下以加深印象。inta=13,b=6;a的二进制为13=8+4+1=1101(二进制)b的二进制为6=4+2=110(二进制)第一步a^=ba=1101^110=1011;第二步b^=ab=110^1011=1101;即b=13第三步a^=ba=1011^1101=110;即a=54.改变符号(好用)变换符号就是正数变成

17、负数,负数变成正数。可以利用求补码的方法(按位取反+1)来处理。如对于-11和11,可以通过下面的变换方法将-11变成1111110101(二进制)–取反->00001010(二进制)–加1->00001011(二进制)同样可以这样的将11变成-1100001011(二进制)–取反->00001010(二进制)–加1->11110101(二进制)可以得到如下代码:1intchangeSign(intn){2return~n+1;3} 5.取绝对值对于任何数,与0异或都会保持不变,与-1即0xFFFFFFFF异或就相当于取反,因此,a与i异或后再减i(因为i为0或-1,所以减i即是要么加

18、0要么加1)也可以得到绝对值因此可以得到如下代码:1intabs(intn){//正数n>>31为0;负数n>>31为12return(n^(n>>31))-(n>>31);//负数取反加一,即取补码取负3}6.高低位互换给出一个32位的无符号整数。称这个二进制数的前16位为“高位”,后16位为“低位”。现在写一程序将它的高低位交换。例如,数0x1234ABCD用二进制表示为:00010010001101001010101111001101将它的高低位进行交换,我们得到了一个新的二进制数:10101011110011010001001000110100它即是0xABCD1234。这个问

19、题用位操作解决起来非常方便,设x=0x1234ABCD由于x为无符号数,右移时会执行逻辑右移即高位补0,因此x右移16位将得到00000000000000000001001000110100。而x左移8位将得到00000000000000001010101111001101。可以发现只要将x>>16与x<<16这两个数相或就可以得到结果。代码如下intexchangeBits(unsignedintn){return(n>>16)

20、(n<<16

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

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

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