运算符 左移 <<
比如:3 << 2 = 12 即 3*2^2 = 12
Int类型(整数)在内存中占4字节
int类型 | 内存表示 | 说明 |
---|---|---|
3 | 0000-0000 0000-0000 0000-0000 0000-0011 | |
12 | 0000-0000 0000-0000 0000-0000 0000-1100 | << 2,整体左移两位补0,长出的丢弃 |
运算符 右移 >>
比如:6 >> 2 = 1 即 6/2^2 = 1
int类型(运算结果) | 内存表示 | 说明 |
---|---|---|
6 | 0000-0000 0000-0000 0000-0000 0000-0110 | |
>> 2 = 1 | 0000-0000 0000-0000 0000-0000 0000-0001 | >> 2,整体右移两位,补什么由最高位决定,此处最高位为0,长出的丢弃 |
-6 | 1111-1111 1111-1111 1111-1111 1111-1010 | 负数就是 正数(6)取反加1 |
>> 2 = -2 | 1111-1111 1111-1111 1111-1111 1111-1110 | >> 2,整体右移两位,补什么由最高位决定,此处最高位为1,最高位补11,长出的丢弃 |
运算符 >>> | 无符号右移 | |
>>>2 = 1073741822 | 0011-1111 1111-1111 1111-1111 1111-1110 | 无符号右移,无论高位是什么,高位补0 |
运算符 &
例: 6 & 3 = 2 两个操作数中位都为1,结果才为1,否则结果为0
int类型(运算结果) | 内存表示 | 说明 |
---|---|---|
6 | 0000-0000 0000-0000 0000-0000 0000-0110 | |
& 3 | 0000-0000 0000-0000 0000-0000 0000-0011 | 与 0假 1真 |
=2 | 0000-0000 0000-0000 0000-0000 0000-0010 | 与运算 |
运算符 |
例: 6 | 3 = 7 两个位只要有一个为1,那么结果就是1,否则就为0
int类型(运算结果) | 内存表示 | 说明 |
---|---|---|
6 | 0000-0000 0000-0000 0000-0000 0000-0110 | |
| 3 | 0000-0000 0000-0000 0000-0000 0000-0011 | 或 0假 1真 |
=2 | 0000-0000 0000-0000 0000-0000 0000-0111 | 或运算 |
运算符 ^
例: 6 ^ 3 = 5
int类型(运算结果) | 内存表示 | 说明 |
---|---|---|
6 | 0000-0000 0000-0000 0000-0000 0000-0110 | |
^ 3 | 0000-0000 0000-0000 0000-0000 0000-0011 | 异或 0假 1真 口诀:相同取0,相异取1 |
=5 | 0000-0000 0000-0000 0000-0000 0000-0101 | 异或运算 |
运算符 ~ 取反