资源描述:
《位运算技巧总结》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、位运算应用口诀清零取反要用・,某位置"J用或(1&0=0,111=1>0
2、1=1)若要取反利交换,轻轻松松用界或(与I异或相当于取反,与0异或相当于不变。「20、0“1二1,「0二1、0八0二0)移位运算要点1它们都是双目运算符,两个运算分量都是整形,结果也是整形。2〃y左移:右边空出的位上补0,左边的位将从字头挤掉,其值相当于乘2。3〃>>〃右移:右边的位被挤掉。对于左边移出的空位,如果是正数则空位补0,若为负数,可能补0或补1,这取决于所用的计算机系统。4〃>>>〃运算符,右边的位被挤掉,对于左边移出的空位一概补上0。位运算符的应用(源操作数s掩码
3、mask)(1)按位与一&1淸零特定位(mask中特定位置0,其它位为1,s二s&mask)2取某数中指定位(mask中特定位置1,其它位为0,s=s&mask)⑵按位或一I常用来将源操作数某些位置1,其它位不变。(mask中特定位置1,其它位为Os二s
4、mask)⑶位异或一八1使特定位的值取反(mask中特定位置1,其它位为0s=s^mask)2不引入第三变量,交换两个变量的值(设a=al,b=bl)目标操作操作后状态a=al^bla=aba=albl,b=blb=alblblb=aba=albl,b=ala二blWaia=a"ba=bl,b=al二
5、进制补码运算公式:—x八x+1二~(x-l)〜X=-X-1-(~x)=x+1~(-x)=X-lx+y二x-~y-1二(x
6、y)+(x&y)x-y=x+"y+1=(x广y)-(~x&y)x"y=(x
7、y)-(x&y)x
8、y=(x&、y)+yx&y=Cx
9、y)-~xx=y:〜(x-y
10、y-x)x!=y:x-y
11、y-xx〈y:(x-y厂((x"y)&((x-y厂x))x<=y:(x
12、~y)&((x"y)
13、~(y-x))x14、(Cx
15、y)&(x-y))//无符号x,y比较x<=y:Cx
16、y)&((x»
17、"(y-x))//无符号x,y比较应用举例仃
18、)判断int型变邀a是奇数还是偶数a&l=0偶数a&l=1奇数(1)取int型变量a的第k位(k=0,1,2sizeof(int)),即a»k&l(2)将int型变量a的第k位清0,即a二a&~(l«k)⑷将int型变量a的第k位置1,即a=a
19、(1«k)(5)int型变量循环左移k次,即a二a«k
20、a»16~k(设sizeof(int)=16)(6)int型变量a循环右移k次,即a=a»k
21、a<<16-k(设sizeof(int)=16)(7)整数的平均值对于两个整数x,y,如果用(x+y)/2求平均值,会产生溢出,因为x+y可能会大于INTJIAX
22、,但是我们知道它们的平均值是肯定不会溢出的,我们用如卜•算法:intaverage(intx,inty)//返回X,Y的平均值ireturn(x&y)+((x"y)>〉l);}(5)判断一个整数是不是2的幕,对于一个数x>二0,判断他是不是2的帚booleanpower2(intx)Ireturn((x&(xT))=0)&&(x!=0);(6)不用temp交换两个整数voidswap(intx,inty)二y;y僅x;X"=y;}(7)计算绝对值intabs(intx)Iinty;y=x»31;return(x)-y;//or:(x+y厂y}仃1)取
23、模运算转化成位运算(在不产生溢出的情况F)a%(2~n)等价于a&(2、-1)(12)乘法运算转化成位运算(在不产生溢出的情况F)a*(2、)等价于a«n(13)除法运算转化成位运算(在不产生溢出的情况F)a/(2、)等价于a»n例:12/8=12»3仃4)a%2等价于a&1(15)if(x==a)x=b;elsex=a;等价于x=a"b"x;(16)x的相反数表示为Cx+1)实例功能I示例丨位运算去掉最后一位
24、(101101->10110)
25、X»1在最后加一个0
26、(101101->1011010)
27、x«1在最后加一个1
28、(101101->101101
29、1)
30、x«1+1把最后一位变成1I(101100->101101)
31、X
32、1把最后一位变成0
33、(101101->101100)Ix
34、1-1最后一位取反
35、(101101->101100)丨X八1把右数第k位变成1
36、(101001->101101,k二3)
37、X
38、(1«(k-1))把右数第k位变成0
39、(101101->101001,k二3)
40、x&~(1«(k-1))右数第k位取反
41、(101001->101101,k=3)
42、x(1«(k-1))取末三位
43、(1101101->101)丨x&7取末k位
44、(1101101->1101,k二5)
45、x&((1«k)-l)取
46、右数笫k位
47、(1101101->1,24)
48、x»(k-1)&1把末k位变成1
49、(101001-