【问题标题】:Unsigned Shift Operation in JavaJava中的无符号移位操作
【发布时间】:2016-05-18 07:36:05
【问题描述】:

谁能告诉我这个操作如何导致“sar”为负数?

【问题讨论】:

标签: java bit unsigned


【解决方案1】:

data[0] 在应用移位运算符之前被提升为int

因此,例如,如果data[0] 为 -128,

您正在对 int -128 应用移位,其二进制表示为:

11111111 11111111 11111111 10000000

这导致

00000011 11111111 11111111 11111110

在你把它转换回byte 之后,你最终得到一个负数

                           11111110 (-2)

如果您想忽略因 int 提升而添加的 1 位,您可以这样写:

byte sar = (byte) ((data[0]&0xff)>>>6);

这将导致 2(当 data[0] 为 -128 时)。

【讨论】:

  • 谢谢,我能想到的唯一方法是让这种移位行为像字节范围内的正常无符号移位一样,即 [byte sar = (byte) (data[0] >>>6 && 0x3).]
猜你喜欢
  • 1970-01-01
  • 2016-01-24
  • 1970-01-01
  • 1970-01-01
  • 2016-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-26
相关资源
最近更新 更多