XOR没有给我数字0或1

时间:2018-07-01 15:23:51

标签: java char integer bit-manipulation xor

我当前输入的是“ 11”和“ 1” 我的变量更长,用于“ 11”,进位是“ 1”。

int carry = 1;
String longer = "11";
System.out.println(carry);  ---> 1
System.out.println(longer.charAt(1)); ---> 1
System.out.println(carry ^ longer.charAt(i)); ---> 48

为什么carry = 1longer.charAt(i) = 1却不对,所以当我对两者进行异或运算时,我得到了48,这甚至不是二进制数?

1 个答案:

答案 0 :(得分:1)

char 1的二进制文件是00000000 00110001

int 1的二进制文件是00000000 00000000 00000000 00000001

当您char 1 ^ int 1时,通过在char 1的开头添加16个零来将int提升为00000000 00110001,因此您实际上是在做:

00000000 00000000 00000000 00110001 
^
00000000 00000000 00000000 00000001

结果是

00000000 00000000 00000000 00110000, in dicimal 48

您可以在char 1之前将int 1解析为^

int carry = 1;
String longer = "11";
int longerInt = Integer.parseInt(String.valueOf(longer.charAt(1)));

System.out.println(carry ^ longer.charAt(1)); //48
System.out.println(carry ^ longerInt); // 0