Java XOR没有给我数字0或1
我的当前输入为“11”和“1” 我的变量更长,表示“11”,进位表示“1”Java XOR没有给我数字0或1,java,char,integer,bit-manipulation,xor,Java,Char,Integer,Bit Manipulation,Xor,我的当前输入为“11”和“1” 我的变量更长,表示“11”,进位表示“1” 为什么carry=1和更长。charAt(i)=1但是当我将两者异或时,我得到48,这甚至不是一个二进制数 int 1的二进制文件是00000000000000000000000000000001 当您char 1^int 1时,char 1将通过在00000000 00110001开头添加16个零而提升为int,因此您实际上在执行以下操作: 00000000 00000000 00000000 00110001 ^
为什么
carry=1
和更长。charAt(i)=1
但是当我将两者异或时,我得到48,这甚至不是一个二进制数
int 1
的二进制文件是00000000000000000000000000000001
当您char 1^int 1
时,char 1
将通过在00000000 00110001
开头添加16个零而提升为int
,因此您实际上在执行以下操作:
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
你明白
1
和'1'
之间的区别吗?不过你是在打印int。如果需要二进制表示,则需要使用Integer.tobinarysting
来代替。请尝试以下操作以查看错误:System.out.println((int)“1”)代码>对不起,carry是整数。谢谢!它起作用了。你知道为什么System.out.println(shorter.charAt(0)^longer.charAt(0)^1==1)
即使没有解析也能工作吗?;(短字符(0)='1'和长字符(0)='1'),因为两者都是字符,00000000 00110001
^00000000 00110001
-->0
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