【发布时间】:2016-09-30 18:36:57
【问题描述】:
我正在尝试在 JAVA 中实现有限域,为此我需要对两个二进制数进行异或。 这是我的代码:
String lastdigits="1000110";
int overflow=11;
int lastdigitsint=Integer.parseInt(lastdigits);
int result=(int) lastdigitsint^overflow;
变量“溢出”的值为11。
当我用溢出 (=11) 对 lastdigitsint 进行异或运算时,输出应该是 1000101。但是,代码输出的是 1095。
有人可以解释为什么会这样吗?谢谢你。
【问题讨论】:
-
你可以简化这个例子,并提供硬编码的值
-
嗨。我是 StackOverflow 的新手,所以我还在学习这里的规则。感谢您的指导!
-
另外,我已将代码编辑到最低限度。是的,我在 IntelliJ 中对其进行了调试,并且我确信正确的值存储在变量“lastdigits”和“overflow”中。
-
我运行了代码并得到了
1000101。这不正是你所期望的吗? -
您使用的不是基于 2 的数字,而是十进制的,
Integer.parseInt(lastdigits)不会返回您的想法。如果您使用的是 Java 7,那么您可以使用基于 2 的int lastdigitsint=0b1000110;而不是int lastdigitsint=Integer.parseInt("1000110");。您的变量overflow很可能会发生同样的情况
标签: java bit-manipulation bitwise-operators xor bitwise-xor