目录
- 位运算
 - 按位“与” &
 - 按位“或” |
 - 异或 ^
 - 移位运算
 - 左移 <<
 - 右移 >>
 - 无符号右移 >>>
 - 总结
 
位运算
按位“与” &
| 
 规则: 如果两个相应的二进制形式的对应的位数都为 1,则结果为 1;否则为 0;  | 
||
| 
 4 & 5  | 
||
| 
 4  | 
 0000 0100  | 
|
| 
 5  | 
 0000 0101  | 
|
| 
 按位与运算  | 
 &  | 
|
| 
 4 & 5 = 4  | 
 0000 0100  | 
|
| 
 1 * 2^2 = 4  | 
||
| 
 -4 & 5  | 
||
| 
 -4  | 
 1111 1100  | 
|
| 
 5  | 
 0000 0101  | 
|
| 
 按位与运算  | 
 &  | 
|
| 
 规则:运算结果符号位是1,为负数, 需要减 1,再取反(其他运算也要遵循)  | 
||
| 
 -4 & 5 = 4  | 
 0000 0100  | 
|
| 
 1 * 2^2 = -4  | 
||
1.正数直接取二进制运算
2.负数取反加一得补码再运算,得到的结果符号位为 0,不需要做任何操作直接给出结果
按位“或” |
| 
 规则: 有 1 为 1;否则为 0;  | 
||
| 
 4 | 5  | 
||
| 
 4  | 
 0000 0100  | 
|
| 
 5  | 
 0000 0101  | 
|
| 
 按位或运算  | 
 |  | 
|
| 
 4 | 5 = 5  | 
 0000 0101  | 
|
| 
 1 * 2^0 + 1 * 2^2 = 5  | 
||
| 
 -4 | 5  | 
||
| 
 -4  | 
 1111 1100  | 
|
| 
 5  | 
 0000 0101  | 
|
| 
 按位或运算  | 
 |  | 
|
| 
 规则:运算结果符号位是1,为负数, 需要减 1,再取反(其他运算也要遵循)  | 
||
| 
 -4 | 5 =  | 
 1111 1101  | 
|
| 
 减1  | 
 1111 1100  | 
|
| 
 取反  | 
 -0000 0011  | 
 -4 | 5 = -3  | 
| 
 1 * 2^0 + 1 * 2^1 = -3  | 
||
异或 ^
| 
 规则: 相同为 0;不同为 1;  | 
||
| 
 4 ^ 5  | 
||
| 
 4  | 
 0000 0100  | 
|
| 
 5  | 
 0000 0101  | 
|
| 
 按位异或运算  | 
 ^  | 
|
| 
 4 ^ 5 = 1  | 
 0000 0001  | 
|
| 
 1 * 2^0 = 1  | 
||
| 
 -4 ^ 5  | 
||
| 
 -4  | 
 1111 1100  | 
|
| 
 5  | 
 0000 0101  | 
|
| 
 按位异或运算  | 
 ^  | 
|
| 
 规则:运算结果符号位是1,为负数, 需要减 1,再取反(其他运算也要遵循)  | 
||
| 
 -4 ^ 5 =  | 
 1111 1001  | 
|
| 
 减1  | 
 1111 1000  | 
|
| 
 取反  | 
 -0000 0111  | 
 -4 ^ 5 = -7  | 
| 
 1 * 2^0 + 1 * 2^1 + 1 * 2^2 = -7  | 
||
移位运算
左移 <<
| 
 规则: 右边空出的位用 0 填补高位,左移溢出则舍弃该高位。  | 
||
| 
 8 << 2  | 
||
| 
 8  | 
 0000 1000  | 
|
| 
 << 2  | 
 0010 0000  | 
|
| 
 左移运算符  | 
 <<  | 
|
| 
 结果  | 
 8 << 2 = 32  | 
|
| 
 1 * 2^5 = 32  | 
||
| 
 -8 << 2  | 
||
| 
 -8  | 
 1111 1000  | 
|
| 
 << 2  | 
 1110 0000  | 
|
| 
 左移运算  | 
 <<  | 
|
| 
 规则:运算结果符号位是1,为负数, 需要减 1,再取反(其他运算也要遵循)  | 
||
| 
 减1  | 
 1101 1111  | 
|
| 
 取反  | 
 -0010 0000  | 
 -8 << 2 = -32  | 
| 
 1 * 2^5 = -32  | 
||
右移 >>
| 
 规则: 左边空出的位正数用 0 负数 1 填补,右移溢出则舍弃该低位。  | 
||
| 
 8 >> 2  | 
||
| 
 8  | 
 0000 1000  | 
|
| 
 >> 2  | 
 0000 0010  | 
|
| 
 左移运算符  | 
 >>  | 
|
| 
 结果  | 
 8 >> 2 = 2  | 
|
| 
 1 * 2^1 = 2  | 
||
| 
 -8 >> 2  | 
||
| 
 -8  | 
 1111 1000  | 
|
| 
 >> 2  | 
 1111 1110  | 
|
| 
 左移运算  | 
 >>  | 
|
| 
 规则:运算结果符号位是1,为负数, 需要减 1,再取反(其他运算也要遵循)  | 
||
| 
 减1  | 
 1111 1101  | 
|
| 
 取反  | 
 -0000 0010  | 
 -8 >> 2 = -2  | 
| 
 1 * 2^1 = -2  | 
||
无符号右移 >>>
| 
 规则: 正数与右移规则一样;负数无符号右移,在高位补 0  | 
||
| 
 8 >>> 2  | 
||
| 
 8  | 
 0000 1000  | 
|
| 
 >> 2  | 
 0000 0010  | 
|
| 
 无符号右移运算符  | 
 >>>  | 
|
| 
 结果  | 
 8 >>> 2 = 2  | 
|
| 
 1 * 2^1 = 2  | 
||
| 
 -8 >>> 2  | 
||
| 
 -8  | 
 1111 1111 1111 1111 1111 1111 1111 1000  | 
|
| 
 >>> 2  | 
 0011 1111 1111 1111 1111 1111 1111 1110  | 
|
| 
 无符号右移运算符  | 
 >>>  | 
|
| 
 规则:运算结果符号位是1,为负数, 需要减 1,再取反(其他运算也要遵循)  | 
||
| 
 减1  | 
 –  | 
|
| 
 取反  | 
 –  | 
 -8 >>> 2 = 1073741822  | 
| 
 1073741822  | 
||
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注的更多内容!

评论(0)