在 Java(以及计算机底层逻辑)中,异或(^) 和 或(|) 是两种不同的位运算符,作用在点对点的二进制位上,区别非常明确。
|(OR)规则:
1,结果就是 10,结果才是 0| a | b | a | b |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
int a = 5; // 0101
int b = 3; // 0011
int c = a | b; // 0111 = 7
^(XOR)规则:
10| a | b | a ^ b |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
int a = 5; // 0101
int b = 3; // 0011
int c = a ^ b; // 0110 = 6
| 对比项 | 或 | | 异或 ^ |
|------|------|---------|
| 1 | 1 | 1 | 0 |
| 是否关心“是否相同” | 不关心 | 关心 |
| 常见用途 | 合并标志位 | 切换 / 加密 / 去重 |
| 是否可逆 | 否 | 是(x ^ y ^ y = x) |
|:设置标志位int FLAG_A = 1; // 0001
int FLAG_B = 2; // 0010
int flags = FLAG_A | FLAG_B; // 0011
^:交换变量(不用临时变量)a = a ^ b;
b = a ^ b;
a = a ^ b;
int result = 0;
for (int x : arr) {
result ^= x;
}
||、&&:逻辑运算符(布尔)|、&、^:位运算符(也可用于 boolean,但不短路)如果你愿意,我也可以用图或算法题例子帮你更直观地理解。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。