一、位运算
&:每一位都比较,有0则0,无0则1
|: 每一位都比较,有1则1,无1则0.
^: 相同则0,不同则1
~:每一位都取反
例如:6&3
110
& 011
-----------
010
例如:6|3
110
| 011
-----------
111
例如:6^3
110
^ 011
-----------
101
(1)异或运算有个特点,一个数据对另一个数据异或两次,该数据不变
5^10^10=5
运用: 利用^,交换x与y。
x=x^y; //x=10^5;
y=x^y; //y=10^5^5=10;
x=x^y; //x=10^5^10=5;
例如:~6
int 四个字节
00000000 00000000 00000000 00000110
11111111 11111111 11111111 11111001 ~6
10000000 00000000 00000000 00000111 -7 求原码
<<:左移 左边最高位丢弃,右边补进0
0000 0001 -> 0000 0010
>>:右移 最高位是0,左边补齐0,最高位是1,左边补齐1
>>>:无符号右移:无论最高位是0还是1,左边都补齐0
例如:12<<1 为24(*2的倍数)
000 00000000 00000000 00001100 12的补码
(0)0000000 00000000 00000000 000011000 8+16=24
例如:12>>1 为6(/2的倍数)
00000000 00000000 00000000 00001100 12的补码
000000000 00000000 00000000 0000110(0) 4+2=6
例如:-2>>>1 为 2147483647
11111111 11111111 11111111 11111110 补码
011111111 11111111 11111111 1111111(0) 结果的补码
练习:计算2的8次方
1<<8