【问题标题】:What is arithmetic left shift of 01001001?什么是 01001001 的算术左移?
【发布时间】:2012-01-10 20:41:31
【问题描述】:

我认为是 00010010 即它试图保持原样的符号位

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

这对吗?

【问题讨论】:

  • @ajay 多少职位?
  • @JustinKSU 这真的重要吗? :)

标签: java bit-manipulation bit-shift


【解决方案1】:

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

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

Wikipedia有更详细的解释。

【讨论】:

    【解决方案2】:

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

    (请注意,Java 将提升有问题的 [byte] 值,因此必须注意将 掩码回为八位字节!否则,您将保留移位的位,可能包括“1”。)

    但是,Arithmetic shift 上的 Wikipedia 文章指出算术左移可能导致溢出错误:

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

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

    编码愉快。

    【讨论】:

      【解决方案3】:

      是的,它是正确的。

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

      【讨论】:

        【解决方案4】:

        当您左移 1 位时,您是正确的。等于 10010010。

        如下左移4位,得到如下答案。

        01001001 << 4 = 10010000
        

        如下右移4位,得到如下答案。

        01001001 >> 4 = 00000100
        

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

        【讨论】:

          猜你喜欢
          • 2021-09-23
          • 1970-01-01
          • 2018-09-18
          • 1970-01-01
          • 1970-01-01
          • 2014-08-31
          • 1970-01-01
          • 2012-07-13
          • 1970-01-01
          相关资源
          最近更新 更多