当j <<= 1
在j
最初为零时执行{{1}}时,它最终会变为零,而不是正常情况下的1。任何其他初始值通常加倍。
有谁知道为什么会这样?
为什么切片字段上的按位操作会导致运行时错误?
答案 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
。将位移到左侧的位置时,它们都保持为零,并在右侧添加新的零位。因此,结果中的所有位都为零,结果为零。