位运算符简述
运算符 | 操作 | 复合形式 |
---|---|---|
~ | 按位一元取反 | 无 |
– | – | – |
& | 按位与 | &= |
– | – | – |
I | 按位或 | = |
– | – | – |
^ | 按位异或 | ^= |
– | – | – |
<< | 左移 | <<= |
– | – | – |
>> | 右移(带符号) | >>= |
– | – | – |
>>> | 无符号右移 | = |
位与运算符(&)
两个数进行位与计算,每一个比特位依次计算,只有数值位对应的两个二进制值都是1的时候才是1.
其实这个和与运算是类似,只不过这个用到了二进制中的每一位上。
位或运算符(|)
同理与,位或计算是只要数值位对应的两个二进制值任意一个是1的时候就是1。
位异或运算符(^)
同理与和或,位异或计算是只有数值位对应的两个二进制值不相等时是1,类似与非。
取反运算符(~)
一个数进行位取反运算,每一个比特位依次取反,即相当于1为0,0为1。
左移(<<)
位左移运算可以说是一个数所有数值位的二进制像左移动确定位数。
注:
- 所有比特位按指定的位数进行左移;
- 空白位用0补充;
- 超出整型存储边界都舍弃。
位左移运用计算总结:一个数位左移1(x<<1)后在整型存储范围内(即没有舍弃部分的时候) 相当于将这个数 乘2(×2);
右移(>>)
位右移运算可以说是一个数所有数值位的二进制像右移动确定位数。
注:
- 所有比特位按指定的位数进行右移;
- 右移分无符号整数和有符号整数:无符号整数空白位用0补充;有符号整数整数空白位用符号位数值补充(即看符号位是0还是1);
- 超出整型存储边界都舍弃;
位右移运用计算总结:一个数位右移1(x>>1)后在整型存储范围内(即没有舍弃部分的时候) 相当于将这个数 除2(÷2);若位右移导致结果<1时,则无符号整数的结果为0,有符号的结果为-1;
常见结论:
- 两个数 ^ 得到的结果,再 ^ 其中任意一个数,能得到另一个数。
- 两个相等的数 ^ 得到的结果为0;
- 0和任意一个数 ^ 得到的都是这个数本身。
- x & 1 可以判断x最后一位是不是1。
- x & (x-1) 可以消除x最后一位的1。
- i & j == 0 可以知道 i 的第 j 位不是1。
- (i>>j)& 1 == 1 可以知道 i 右移 j 位后等于1。