位运算符与高级操作
运算符
高级操作
-
左移实现乘法
-
左移n位等价于乘以2的n次方
int x; x = 2; x = x << 2; x = x << 3;
-
使用左移实现乘法运算仅限于乘以2的倍数
-
是不是只要左移就能够实现乘以2的倍数呢?
char x = 120; x = x << 1;
-
-
右移实现除法
-
右移n位等价于除以2的n次方
int x = 100; x = x >> 1; x = x >> 3;
-
使用右移实现除法运算仅限于除以2的倍数
-
-
不使用中间变量交换两个整型变量的值
int a = 5,b = 6; a = a + b; b = a - b; a = a - b;
以上代码看似可以实现两个整型变量数值的交换,但是你能看出其中的bug吗?
int a = 5, b = 6; a = a ^ b; b = a ^ b; a = a ^ b;
-
判断整数的奇偶性
x & 1
-
位操作进行高低位交换
a = (a >> 8) | (a <<8 );
-
寄存器的置位
-
嵌入式系统总是要求用户对变量或寄存器(8位)进行位操作。给定一个变量a,将a的第3个bit位置1(bit位最右边的位第0位),其他位的值不变
a = a | 0x08 a = a | (1 << 3)
-
将第三个bit位清零,其他位的值保持不变
a = a & (~0x08) a = a & (~(1 << 3))
-