为何这段Java代码输出结果为9?详解位异或(XOR)运算逻辑
为什么
12 ^ 5 的输出是9?理解Java中的位异或运算 Hey there! Let's break this down step by step so you can see exactly why your code outputs 9, starting with what the XOR (bitwise exclusive OR) operator actually does.
首先:什么是位异或?
XOR是一种按位运算——它直接对整数的二进制位进行操作,规则非常简单:
- 如果两个对应二进制位相同,结果位为
0 - 如果两个对应二进制位不同,结果位为
1
可以简单记成:相同为0,不同为1。
第一步:把十进制数转成二进制
按位运算都是在二进制层面进行的,所以我们先把12和5转换成二进制(为了对齐计算,我们把位数补一致):
12的二进制是1100(对应十进制的8+4=12,也就是2³ + 2²)5的二进制是0101(对应十进制的4+1=5,也就是2² + 2⁰)
第二步:逐位应用XOR规则
现在把两个二进制数对齐,对每一对位应用XOR规则:
1100 (对应十进制12) ^ 0101 (对应十进制5) -------- 1001 (运算结果)
我们从右到左(从最低位到最高位)逐个看:
- 最右边的位(2⁰位):
0vs1→ 不同 → 结果为1 - 第二位(2¹位):
0vs0→ 相同 → 结果为0 - 第三位(2²位):
1vs1→ 相同 → 结果为0 - 最左边的位(2³位):
1vs0→ 不同 → 结果为1
第三步:把二进制结果转回十进制
得到的二进制结果1001转成十进制的计算是:(1 * 2³) + (0 * 2²) + (0 * 2¹) + (1 * 2⁰) = 8 + 0 + 0 + 1 = 9
这就是为什么int c = a ^ b;会把c赋值为9,最终输出结果是9的原因!
内容的提问来源于stack exchange,提问作者rocktimsaikia
相关产品推荐
相关产品推荐

