什么是01001001的算术左移?

时间:2012-01-10 20:41:31

标签: java bit-manipulation

我认为这是00010010 即它试图保持符号位

另一方面,逻辑左移1位将是 10010010

这是对的吗?

4 个答案:

答案 0 :(得分:7)

对于左移,算术和逻辑移位是相同的。

不同之处仅在于右移,其中算术右移将在移位后将旧MSB复制到新MSB,从而在移位时保持负数转换为正数。

Wikipedia有更详细的解释。

答案 1 :(得分:4)

在Java <<中是一个逻辑左移。始终将0添加为LSB。

(请注意,Java将提升有问题的[byte]值,因此必须小心掩盖到octect!否则你将保留移位(可能包含“1”。)

然而,关于Arithmetic shift的维基百科文章指出算术左移可能导致溢出错误:

  

... 请注意,算术左移可能会导致溢出; 这是它与逻辑左移不同的唯一方式。

(这是不是在Java中的情况,但请记住。)

快乐的编码。

答案 2 :(得分:1)

是的,这是正确的。

xn的算术左移等于x * (2^n)。因此,在您的示例中,01001001的{​​{1}}左移1等于10010010(73 *2¹= 146)。

答案 3 :(得分:0)

当您离开1位位置时,你是正确的。它等于10010010。

当您按如下方式向左移动4位时,您会得到以下答案。

01001001 << 4 = 10010000

当您按如下方式向右移动4位时,您会得到以下答案。

01001001 >> 4 = 00000100

由于移位而留空的位用零填充。

相关问题