【问题标题】:Bitwise Operations -- Arithmetic Operations位运算——算术运算
【发布时间】:2010-05-10 06:33:16
【问题描述】:

您能否用一些很好的例子解释以下几行。

算术左移 n 是 相当于乘以 2n (前提是该值不 溢出)。

还有:

正确的算术 将二进制补码值移位 n 相当于除以 2n 和 向负无穷舍入。如果 二进制数被视为一个' 补,然后同样的右移 运算结果除以 2n 并向零舍入。

【问题讨论】:

  • 另外,我不确定你从哪里得到这句话,但左算术移位 n 相当于乘以 2^n(not 2n)。右算术移位也是如此。
  • 我添加了令人敬畏的 标签,因为这个问题真的值得。

标签: c bitwise-operators


【解决方案1】:

我将解释在我们更熟悉的基础上发生的事情:10.

假设您有一个以 10 为底的数字 N=123。现在,你将这个数字“移动”到左边 k=3 个位置,用 0 填充空的数字。所以你得到 X=123000。

注意 X = N * 10k

底数为 2 的情况类似。

 Example 1 (base 10)   |  Example 2 (base 2)
                       |
 N        =    123     |  N       =   110101 (53 in base 10)
 k        =      3     |  k       =        2 (in base 10)
 N << k   = 123000     |  N << k  = 11010100 (212 in base 10)
                       |
 10^k     =   1000     |  2^k     =      100 (in base 2; 4 in base 10)
 N * 10^k = 123000     |  N * 2^k = 11010100 (53 * 4 = 212 in base 10)
                       |

右移的情况只是过程的镜像,在基数 10 中也是类似的。例如,如果我在基数 10 中有 123456,并且我“右移”3 个位置,我得到 123。这是123456 / 1000(整数除法),其中 1000 = 103

【讨论】:

  • 任何好的网站或文档,关于位操作的问题......需要它来很好地理解它......
  • 看负数时右移会变得更有趣。符号位被扩展,你最终会得到 -1 &gt;&gt; n 等于 -1 但 1 &gt;&gt; n 等于 0 的奇怪行为(对于任何正的 n)。
【解决方案2】:

【讨论】:

  • 好吧,我只是在阅读维基百科。但我在想几个例子,其中满足这些条件..希望你能帮忙..
【解决方案3】:

创建自己的示例很容易。

考虑五个二进制文件101。左移一次,你会得到1010,它是十进制的。再做一次,你会得到10100,它是 20,以此类推..

【讨论】:

    猜你喜欢
    • 2012-03-21
    • 2016-03-10
    • 1970-01-01
    • 2012-12-16
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多