位运算应用口诀清零取反要用与,某位置一可用或若要取反和交换,轻轻松松用异或移位运算要点1它们都是双目运算符,两个运算分量都是整形,结果也是整形
2""右移:右边的位被挤掉
对于左边移出的空位,如果是正数则空位补0,若为负数,可能补0或补1,这取决于所用的计算机系统
4">>>"运算符,右边的位被挤掉,对于左边移出的空位一概补上0
位运算符的应用(源操作数s掩码mask)(1)按位与--&1清零特定位(mask中特定位置0,其它位为1,s=s&mask)2取某数中指定位(mask中特定位置1,其它位为0,s=s&mask)(2)按位或--|常用来将源操作数某些位置1,其它位不变
(mask中特定位置1,其它位为0s=s|mask)(3)位异或--^1使特定位的值取反(mask中特定位置1,其它位为0s=s^mask)2不引入第三变量,交换两个变量的值(设a=a1,b=b1)目标操作操作后状态a=a1^b1a=a^ba=a1^b1,b=b1b=a1^b1^b1b=a^ba=a1^b1,b=a1a=b1^a1^a1a=a^ba=b1,b=a1二进制补码运算公式:-x=~x+1=~(x-1)~x=-x-1-(~x)=x+1~(-x)=x-1x+y=x-~y-1=(x|y)+(x&y)x-y=x+~y+1=(x|~y)-(~x&y)x^y=(x|y)-(x&y)x|y=(x&~y)+yx&y=(~x|y)-~xx==y:~(x-y|y-x)x
=y:x-y|y-xx>3(14)a%2等价于a&1(15)if(x==a)x=b;Elseif(x==b)x=a;等价于x=a^b^x;(16)x的相反数表示为(~x+1)#include//设置x的第y位为1#definesetbit(x,y)(x)|=(1(pos-1)&1)//打印x的值#defineprint(x)printf("%d