我在互联网上发现了这个java问题并对此有一些疑问。
哪些陈述准确无误:
我有点不确定签名班次是什么,这是否意味着它保留了二进制数的符号,无论班次本身发生了什么(这对我来说最有意义),还是意味着除非在换档操作本身中被覆盖,否则MSB不会改变。
所以
答案 0 :(得分:2)
另一种说明:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html
从文章: “无符号右移运算符”>>>“将零移至最左侧位置,而”>>“之后的最左侧位置取决于符号扩展。”
答案 1 :(得分:1)
“>>” 中执行带符号的移位,用最左边的位填充新的位。最左边的位确定该数字是负数还是正数。 0表示正数,1表示负数。例如,
>> 1
10111100 becomes 11011110
the leftmost bit is a 1, so the new bits after the shift become ones
>> 1
01110011 becomes 00111001 since the leftmost bit is a 0
“>>>” 中执行无符号移位,这意味着在移位后新位总是用零填充。例如,
>>> 1
10111100 becomes 01011110
the new bits are filled in as zeroes no matter what the leftmost bit is
enter code here
答案 2 :(得分:0)
答案 3 :(得分:0)
是否意味着它保留了二进制数的符号,无论移位本身发生了什么(这对我来说最有意义),或者它是否意味着MSB不会改变,除非它在移位中被覆盖操作本身。
那是一回事。 ;)
而>>>将始终用0覆盖MSB,因此无符号
如果你做-1 >>> 0
它仍然是否定的,但它基本上是正确的;)
左移不是签名或未签名,只是左移,正如您所说,它可能会也可能不会改变标志。
答案 4 :(得分:0)
<< Signed left shift op1 << op2
>> Signed right sift op1 >> op2
>>> Unsigned right shift op1 >>> op2