【发布时间】:2016-01-30 22:19:09
【问题描述】:
我正在用 Java 编写左移算法,并且一直在手动进行一些左移计算。所有这些数字都输入为 byte,顺便说一句。
假设我正在处理从 -128 到 127 的 8 位整数。
然后根据我的计算:
(-113 << 4) == (-65 << 4) == -16
因为
-113 == 1 0 0 0 1 1 1 1
-113 << 4 == 1 1 1 1 0 0 0 0 == -16
但确实如此
-65 == 1 0 1 1 1 1 1 1
-65 << 4 == 1 1 1 1 0 0 0 0 == -16
所以左移 -113 乘 4 和左移 -65 乘 4 得到相同的值?不是所有的左移操作都应该产生唯一的值吗?还是我有这个权利?
编辑:
我在 Java 中工作,我的所有数字都是字节,JVM 抛出“错误:精度损失错误”,这也是引发我的问题的原因。 谢谢!
【问题讨论】:
-
问题不清楚。你想弄清楚什么?
-
这就是它的工作原理。 “操作数中的每一位都只是简单地移动了给定数量的位位置,并且空位位置被填充,通常用零填充(与循环移位相反)。” en.wikipedia.org/wiki/Logical_shift
-
由于这些是负值,您可能希望保留符号位,但正如 Amit 所说,您要做什么并不完全清楚。
-
已编辑。是不是更清楚了?
-
@M.M 好吧,我正在使用 Java。我的代码如下: byte
标签: java bit-manipulation bitwise-operators bit-shift