符号 | 描述 | 运算规则 |
---|---|---|
& | 与 | |
| | 或 | |
^ | 异或 | 两个位相同为 0,相异为 1 |
~ | 取反 | |
<< | 左移 | 各二进位全部左移若干位,高位丢弃,低位补 0 |
>> | 右移 | 各二进位全部右移若干位,对无符号数,高位补 0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补 0(逻辑右移) |
注意
- 位操作只能用于整形数据,对 float 和 double 类型进行位操作会被编译器报错
- 位操作符的运算优先级比较低,因为尽量使用括号来确保运算顺序
在 Java 中应用
判断奇偶
只要根据最未位是 0 还是 1 来决定,为 0 就是偶数,为 1 就是奇数。因此可以用 if ((a & 1) == 0)代替 if (a % 2 == 0)来判断 a 是不是偶数
交换两数
a ^= b;
b ^= a;
a ^= b;
变换符号
变换符号就是正数变成负数,负数变成正数,只需要取反后加 1 即可:~a + 1
求绝对值
int my_abs(int a) {
int i = a >> 31;
return ((a ^ i) - i);
}
求 2 的 3 次方
2<<(3-1)
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于