【问题标题】:Modulo Behavior in C Left Shift OperationC 左移运算中的模行为
【发布时间】:2017-06-20 09:24:14
【问题描述】:

按位移位运算符的 ISO C99 标准对左移有如下说明:

E1

我不明白在位移位的上下文中,“比结果类型中可表示的最大值多模减少一”是什么意思。

【问题讨论】:

  • 意思是如果 E1 * 2^E2 太大而无法放入结果类型,则使用模运算将其减少。例如,如果您的结果类型是合理平台上的无符号 32b 整数,则上述数学将减少模 2^32。 (2^32 - 1) 是结果类型中可表示的最大值,因此将减去该值加 1(即 - 2^32)。
  • 将不适合结果的位切掉是一种更复杂的说法。

标签: c binary bit-manipulation


【解决方案1】:

基本上是在谈论integer wrapping。如果数学值大于该类型的最大可表示值,则它会换行,即 模运算

【讨论】:

    【解决方案2】:

    结果类型中可表示的最大值将设置其所有位,而不是 2 的单个幂。但是,进行模运算的数字(当值开始回绕时)是 2 的幂,即下一个,可以通过将最大可表示值加 1 来获得。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-28
      • 2022-11-03
      • 1970-01-01
      • 2014-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多