【发布时间】:2012-01-10 20:41:31
【问题描述】:
我认为是 00010010 即它试图保持原样的符号位
另一方面,逻辑左移 1 个 pos 将是 10010010
这对吗?
【问题讨论】:
-
@ajay 多少职位?
-
@JustinKSU 这真的重要吗? :)
标签: java bit-manipulation bit-shift
我认为是 00010010 即它试图保持原样的符号位
另一方面,逻辑左移 1 个 pos 将是 10010010
这对吗?
【问题讨论】:
标签: java bit-manipulation bit-shift
【讨论】:
在 Java 中 << 是一个逻辑左移。 0 始终作为 LSB 添加。
(请注意,Java 将提升有问题的 [byte] 值,因此必须注意将 掩码回为八位字节!否则,您将保留移位的位,可能包括“1”。)
但是,Arithmetic shift 上的 Wikipedia 文章指出算术左移可能导致溢出错误:
...请注意,算术左移可能会导致溢出;这是它与逻辑左移的唯一区别。
(这 不是在 Java 中的情况,但请记住。)
编码愉快。
【讨论】:
是的,它是正确的。
x 的算术左移n 位等于x * (2^n)。因此,在您的示例中,01001001 的 ar 左移 1 位置等于 10010010 (73 * 2¹ = 146)。
【讨论】:
当您左移 1 位时,您是正确的。等于 10010010。
如下左移4位,得到如下答案。
01001001 << 4 = 10010000
如下右移4位,得到如下答案。
01001001 >> 4 = 00000100
由于移位而留空的位用零填充。
【讨论】: