【问题标题】:Why are two options present for right shift? (arithmetic / logical)为什么右移有两种选择? (算术/逻辑)
【发布时间】:2013-06-07 05:29:06
【问题描述】:

为什么右移有两种选择——附加符号位(算术右移)或附加 0(逻辑右移),为什么实现要选择哪个?

【问题讨论】:

  • 是的。我能够做到这一点。那么为什么右移需要附加符号位呢?
  • 左移已经是算术;这与乘以 2 的幂相同。用符号位填充最低有效位是没有意义的。
  • 是的。请帮助我理解右移
  • 为什么人们不赞成这个问题?请添加评论?我认为这是一个显而易见的问题。它是从某个地方重复的吗?
  • 为什么这个标签是“C”?在 C 中你没有那个选择。Java 有 >> and >>> 可以让你区分这两种移位,但 C 没有。

标签: c bit-manipulation bit-shift


【解决方案1】:

不同之处在于允许处理有符号(二进制补码)和无符号整数。

  • 当右移有符号(二进制补码)整数时, 最高有效位是符号; 0 表示正数或零,1 表示 消极的。为了保留右移符号,必须 复制现有的高位位,或附加符号 更喜欢。

  • 当右移一个无符号整数时,为了保留 大小正确一个必须在左边附加零,不管 现有的高位。

【讨论】:

    【解决方案2】:

    如果您也想移动符号位,我相信您正在寻找循环左移操作而不是“标准左移”操作。

    您可以查看以下链接中提出的问题: Circular shift in c

    为了更好地理解 bitwie 操作,您可以查看以下维基百科页面 https://en.wikipedia.org/wiki/Bitwise_operation

    【讨论】:

    • +1 用于提及循环移位。 -1 表示“右移不应依赖于实现”。它取决于(负)有符号值的实现。
    • 嗨乔纳森。删除了我关于班次不依赖于实施的声明。我写的时候没有考虑负值。谢谢
    【解决方案3】:

    E1 >> E2 的结果是 E1 右移 E2 位位置。如果 E1 具有无符号类型或 E1 具有带符号类型和非负值,则结果的值是 E1 / 2E2 商的整数部分。如果 E1 具有带符号类型和负值,则 结果值是实现定义的。

    我猜你指的是这一段。

    这是因为该标准没有定义如何存储负数(2 的补码、1 的补码等) - 它是由实现定义的(取决于硬件)。

    有符号整数的左移“几乎”相同。

    E1 E2,比结果类型中可表示的最大值多模一减少。如果 E1 有带符号的类型和非负值,并且 E1 × 2E2在结果类型中可以表示,那么这就是结果值;否则,行为未定义

    【讨论】:

      【解决方案4】:

      你的问题很荒谬。在二进制补码系统中,数字的符号由其最高位确定。对于右移,您可以决定移入零(逻辑移位)或符号位的副本(算术移位)。对于左移,唯一有意义的操作是移入零。

      【讨论】:

      • 你好,卡尔。谢谢!现在For a right shift, you can either decide to shift in a zero (logical shift) or a copy of the sign bit (arithmetic shift)。在什么情况下它们中的任何一个都会改变?
      • 我不明白你的问题。
      • 我的意思是,你说,在右移中,我们要么决定移一个零,要么复制符号位。为什么会这样??
      • @CHID:因为在右移时,可以选择进行算术右移或逻辑右移。实现可以选择。如果他们选择算术,他们必须保留符号位并进行符号扩展(所以-64 >> 1 产生 -32)。左移时,没有这样的选择。
      • @CHID:这是任意选择。他们可以为你所关心的抛硬币。如果你想要算术右移,只需使用/。如果你想要逻辑右移,你可能一开始就不应该使用有符号整数类型。
      【解决方案5】:

      在二进制补码表示下,“正常”左移的行为与算术左移完全相同:将负数左移会导致该数字加倍(只要结果不溢出)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-11-25
        • 1970-01-01
        • 2021-09-23
        • 1970-01-01
        • 1970-01-01
        • 2011-04-11
        • 2019-02-19
        相关资源
        最近更新 更多