Java 为什么我会得到-3';我不会得到+;7.
所以我在做这个,我以为它会给我+7,但它会给我-3Java 为什么我会得到-3';我不会得到+;7.,java,bit-manipulation,Java,Bit Manipulation,所以我在做这个,我以为它会给我+7,但它会给我-3 public class BitManipulation{ public static void main (String[] args){ System.out.println(~2 | 5 >> ((2 & 2))); } } 尝试按如下方式打印每个步骤: System.out.println(2 & 2); 您将了解到2&2=2(我们正在对两个二进制数=>0010和0010=0010(即2)
public class BitManipulation{
public static void main (String[] args){
System.out.println(~2 | 5 >> ((2 & 2)));
}
}
尝试按如下方式打印每个步骤:
System.out.println(2 & 2);
您将了解到2&2=2(我们正在对两个二进制数=>0010和0010=0010(即2)执行按位“AND”函数),因此将其插入下一步:
System.out.println(5 >> 2);
现在您有了5>>2=1(我们将该二进制数移到右边填充零,因为该数字为正数,所以0101变为0001或1),并将其插入到最后一步:
System.out.println(~2 | 1);
你得到~2 | 1=-3(我们执行的是一个按位“NOT”和一个按位“OR”的运算,所以0010变成1101,我相信这也是它变成负数的地方,-1101或0001给了我们-1101或-3)2&2是2
那么你有5>>2,它给出1(二进制中的5是101)
因此,我们仍然使用~2|1
~2正在反转所有位。对于8个二进制数字(32也一样,但让我们保持简洁…),00000010(2)的位反转为11111101。或者用1来表示这一点不会改变任何事情
现在,11111101-当作为一个数字处理时,它被解释为2的补码。在这个系统中,最高有效位是符号,这里是1,所以数字是负数。为了得到2的补码中数字的绝对值,我们需要将位反转并加1
因此,将11111101倒置得到00000010,再加上1得到00000011,也就是3。回想一下,这个符号是负号,所以这里有-3!!!:-) 为什么你认为你应该得到7?提示:不要打印最终操作的结果;为什么不打印发生的每个“子操作”的结果?或者在调试器中运行它?当你做到这一点;你不明白为什么2&2会给出它所给出的结果。。...左右那么也许这就构成了一个问题。但到目前为止,你只写了:“请告诉我如何分解这个简单的小表达式”—3是最合理的结果-1如果运算符优先级错误。就我所知,7是毫无意义的。