我正在尝试在JAVA中实现有限字段,为此我需要对两个二进制数进行异或。 这是我的代码:
String lastdigits="1000110";
int overflow=11;
int lastdigitsint=Integer.parseInt(lastdigits);
int result=(int) lastdigitsint^overflow;
变量'overflow'的值为11
。
当我使用overflow(= 11)对lastdigitsint进行XORing时,输出应为1000101.但是,代码输出为1095.
有人可以解释为什么会这样吗?谢谢。
答案 0 :(得分:1)
从一开始就错了
String lastdigits="1000110";
int lastdigitsint=Integer.parseInt(lastdigits);
最后一位数值将是1000110 - 那是一千万个houndred和十个 所以二进制表示与你的期望大不相同。 你想做的只是:
int lastdigitsint=0b1000110;
这是正确的二进制整数。
所以:
public static void main(String[] args) {
String lastdigits = "1000110";
int overflow = 0b11;
int lastdigitsint = Integer.parseInt(lastdigits);
int result = lastdigitsint ^ overflow;
System.out.println("Dec:" + lastdigitsint);
System.out.println("Dec:" + overflow);
System.out.println("Dec:" + result);
System.out.println("Bin" + Integer.toBinaryString(lastdigitsint));
System.out.println("Bin" + Integer.toBinaryString(overflow));
System.out.println("Bin" + Integer.toBinaryString(result));
System.out.println("And now the proper way:");
lastdigitsint = 0b1000110;
result = lastdigitsint ^ overflow;
System.out.println("Dec:" + lastdigitsint);
System.out.println("Dec:" + overflow);
System.out.println("Dec:" + result);
System.out.println("Bin" + Integer.toBinaryString(lastdigitsint));
System.out.println("Bin" + Integer.toBinaryString(overflow));
System.out.println("Bin" + Integer.toBinaryString(result));
}
结果:
Dec:1000110
Dec:3
Dec:1000109
Bin:11110100001010101110
Bin:11
Bin:11110100001010101101
And now the proper way:
Dec:70
Dec:3
Dec:69
Bin:1000110
Bin:11
Bin:1000101
接缝对我来说是合法的。
答案 1 :(得分:1)
你不是在考虑你认为你是XORing的数字。
你十一百一十一和十一
对这两个数字的二进制表示的位执行XOR,因此您对二进制数pg_dumpall
和11110100001010101110
进行异或运算,结果为1011
。有趣的是,该数字的十进制表示为11110100001010100101
,这正是您对二进制数字1000101
和1000110
进行异或后得到的结果的二进制表示。
11
如果你想对二进制数Decimal Binary
1000110 == 11110100001010101110
^
11 == 00000000000000001011
--------------------
1000101 == 11110100001010100101
和1000110
进行异或,你应该写:
11
这会给你十进制数 String lastdigits="1000110";
int overflow=3; // 11 in binary is 3 in decimal
int lastdigitsint=Integer.parseInt(lastdigits,2);
int result=(int) lastdigitsint^overflow;
(其二进制表示为69
)。