在介绍这些运算符运算方式之前需要注意:位运算都是整数之间的运算
<<(左移)
举个栗子:18 << 3 = 144,那么计算机是如何计算它的呢?
看图解析↓
PS:当二进制数最高位是0时,左移后空出位用0补齐。
同理:18 << 4 = 288 ; 18 << 5 = 576 ; 18 << 6 = 1152
可以看出规律:18 << 6 = 1152 = (18 << 5) * 2 = (18 << 4) * 2 * 2 = (18 << 3) * 2 * 2 * 2
因此得出:整数 x 做左移 n 时(x << n),等于 x 乘以 2的n次方(x * 2^n)
但是:当18<<27呢?18 << 27 = -1879048192,恰好将1的位置移动到了32位01代码的第一位,因此变成了负数。
总结:在一定范围内,一个整数每左移一位就乘以2。
>>(右移)
举个栗子:18 >> 3 = 2,那么计算机是如何计算它的呢?
看图解析↓
PS:当二进制数最高位是0时,左移后空出位用0补齐,当最高位是1时,空出位用1补齐(用来区分正负数)。
同理:18 >> 2 = 4 ; 18 >> 1 = 9
因此得出:整数 x 做右移 n 时(x >>n),等于 x 除以 2的n次方(x / 2^n)。
总结:在一定范围内,一个整数每右移一位就除以2。
>>>(无符号右移)
可根据上述移位方式来计算,不同的是
PS:被移位二进制最高位无论是0或者1,空缺位都用0补。
&(与运算)、| (或运算)、^(异或运算)
&计算方式:二进制进行&运算,只有1&1时结果是1,否则是0。
| 计算方式:二进制位进行|运算,只有0&0时结果是0,否则是1。
^计算方式:二进制位相同进行^运算,结果是0(1^1=0, 0^0=0);
二进制位不同进行^运算,结果是1(1^0=0,1^0=0)。
举个栗子:12&5、12|5、12^5,看↓图
~(取反运算)
例如 ~ 6 = -7,计算解析↓
PS:整数取反,各二进制码按补码各位取反
负数取反,各二进制码按补码各位取反