先给大家讲个笑话吧,说世界上有10种人,一种知道二进制,而另一种不知道二进制。
位运算的基础就是二进制。
二进制的位运算包括五种运算:
与,或,异或,左移,右移
与(&) 0&0 = 0,0&1 = 0;1&0 = 0;1&1 = 1;
或(|) 0|0 = 0, 0|1 = 1; 1|0 = 1; 1|1 = 1;
异或(^)0^0 =0; 0^1 = 1; 1^0 = 1; 1^1 = 0;
左移(<<) 00001001 << 2 =00100100
右移(>>) 10001010 >> 3 = 00010001
前面已经提到过,右移分为算术右移和逻辑右移,主要在于无符号数和有符号数的区别。
逻辑右移:右移后,左端补零
00001010 >> 2 = 00000010
算术右移:右移后,左端补最高位数
有符号数10001010 >>3 = 11110001
对于无符号数按照逻辑右移,有符号数一般为算术右移
1.位运算的特点
1,按位与(&)
清零特定位,10001010 & 01111111 = 00001010 (首位清零)
取指定位, 10001010 & 10000000 = 10000000 (取首位)
2,按位或(|)
将某一位置置一,10001010 | 00000001 = 10001011 (末尾置一)
3,位异或(^)
使特定位取反 ,10001010 ^ 10001010 = 00001010 (首位取反)
不引入第三变量,交换两个变量的值
a = a^b ;b = a^b;a = a^b
4,补码运算
-x = ~x +1
2.位运算的应用
应用举例:
1,判断int型变量