Java二进制移位操作

时间:2012-08-14 13:56:14

标签: java bit-shift

我在互联网上发现了这个java问题并对此有一些疑问。

哪些陈述准确无误:

  • a)>> >>>执行签名班次执行无符号的移位。
  • b)>>> >>执行签名班次执行无符号的移位。
  • c)<< <<<<<<<<<执行无符号的移位。
  • d)<<< <<<<<<<执行无符号班次。

我有点不确定签名班次是什么,这是否意味着它保留了二进制数的符号,无论班次本身发生了什么(这对我来说最有意义),还是意味着除非在换档操作本身中被覆盖,否则MSB不会改变。

所以

  • a)true:无论使用>>转换了多少班次你做了,MSB总是保留原来的签名?而>>>将始终用0覆盖MSB,因此无符号?
  • b)因为上述解释而错误
  • c)不确定,因为第一位可以用<<<<<换班操作,因此不保留其标志?
  • d)不确定。

5 个答案:

答案 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