我当前输入的是“ 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 = 1
和longer.charAt(i) = 1
却不对,所以当我对两者进行异或运算时,我得到了48,这甚至不是二进制数?
答案 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