C语言位运算位运算
一、 位运算应用口诀
清零取反要用与,
某位置一可用或;
若要取反和交换,
轻轻松松用异或。
二、 移位运算
1.“<<”左移:左边的位将从字头挤掉,右边的空出位补0。左移几位,相当于乘以二的几次方。
2.“>>”右移:右边的位将从字头挤掉,左边空出的位若是正数补0,若是负数,可能补1或补0相当于除以2的几次方。
3.按位与&: A、清零特定位 eg:x=101101 将第四位清零
X&~(1<<(4-1))
B、取某数中的指定位 eg:X=101101 取第三
X>>(3-1)&1
4.按位或1: 常数某位置1,其它不变 eg:X=101101 将第二位置1 X |(1<<2-1)
5.按位异或^: A、使特定位取反 eg: X=101101 末5位置1
X^(1<<(5-1))
B、不引入第三变量,交换两个变量的值
eg: void swap (int x, int y)
三、 应用举例
1.将char型变量循环左移K次 a=a<<k | a>>8-k
循环右移K次 a=a>>k | a<<8-k
2.求平均值(不产生溢出),求X、Y的平均值:
(X&Y)+((X^Y)>>1)
3.取模运算:a%(2的n次方)ó a&(2的n-1次方)
4.判断奇数 (X&1)==1
判断偶数 (X&1)==0