左移操作

时间:2013-12-31 13:27:41

标签: go bit-manipulation bit-shift

  1. j <<= 1j最初为零时执行{{1}}时,它最终会变为零,而不是正常情况下的1。任何其他初始值通常加倍。

    有谁知道为什么会这样?

  2. 为什么切片字段上的按位操作会导致运行时错误?

2 个答案:

答案 0 :(得分:7)

考虑j = 0

0000 0000 0000 0000

现在什么是j <<= 1?它是:

0000 0000 0000 0000
←                 ↑
Shifted         Added

这是...相同的数字(0)。

将数字左移1,将其乘以2,0 * 2为0。

答案 1 :(得分:2)

如果j为零,则其所有位均为0。将位移到左侧的位置时,它们都保持为零,并在右侧添加新的零位。因此,结果中的所有位都为零,结果为零。