为什么';java中-1的t位移位工作?
我试着用java做为什么';java中-1的t位移位工作?,java,bit-manipulation,Java,Bit Manipulation,我试着用java做-1>-1,但一开始打印的结果仍然是-1,我认为这是因为算术右移的符号扩展性质。但是通过额外的测试,我发现-1>[0,64]是-1。为什么会发生这种情况?这是因为符号扩展-1由仅包含1的位序列表示。因此,使用带符号扩展的右移位总是产生具有所有位1的序列,即-1,而不考虑位移位的第二个操作数。这是因为符号扩展-1由仅包含1的位序列表示。因此,使用带符号扩展的右移位总是产生具有所有位1的序列,即-1,而不考虑位移位的第二个操作数。这是算术右移位的符号扩展性质-1是0xfffffff
-1>-1
,但一开始打印的结果仍然是-1
,我认为这是因为算术右移的符号扩展性质。但是通过额外的测试,我发现-1>[0,64]
是-1
。为什么会发生这种情况?这是因为符号扩展<代码>-1由仅包含1的位序列表示。因此,使用带符号扩展的右移位总是产生具有所有位1的序列,即-1
,而不考虑位移位的第二个操作数。这是因为符号扩展<代码>-1由仅包含1的位序列表示。因此,使用带符号扩展的右移位总是产生具有所有位1的序列,即-1
,而不考虑位移位的第二个操作数。这是算术右移位的符号扩展性质<代码>-1是0xffffffff
;最左边的位是一个1
,所以当你进行算术右移时,你会得到更多的1位,所以它保持0xffffffff
@AdrianColomitchi,而不是这个问题的重复。在这种情况下,答案与移位运算符仅使用移位量的底部5位有关,因此1>>32
与1>>0
相同。这个问题是关于符号扩展的。我确信这是一个重复,只是不涉及那个问题。这是算术右移的符号扩展性质<代码>-1是0xffffffff
;最左边的位是一个1
,所以当你进行算术右移时,你会得到更多的1位,所以它保持0xffffffff
@AdrianColomitchi,而不是这个问题的重复。在这种情况下,答案与移位运算符仅使用移位量的底部5位有关,因此1>>32
与1>>0
相同。这个问题是关于符号扩展的。我敢肯定这是个骗局,只是不关那个问题。@KelvinZhang没有任何迹象。如果设置了最高阶位,则表示从其他位表示的(无符号)数中减去2^31
。(2的补码表示)@KelvinZhang没有符号位。如果设置了最高阶位,则表示从其他位表示的(无符号)数中减去2^31
。(2’s-补语表示法)