【问题标题】:Why bitwise shift acts differently when sequenced?为什么按位移位在排序时表现不同?
【发布时间】:2016-08-28 10:18:50
【问题描述】:
为什么按位左移会有不同的结果?
1 << 32; # 1
1 << 31 << 1; # 0
【问题讨论】:
标签:
javascript
bitwise-operators
bit-shift
【解决方案2】:
JavaScript 定义了一个 32 的左移来什么都不做,大概是因为它碰到了 32 位边界。您实际上不能移动超过 31 位的内容。
您的方法首先移动 31 位,然后移动最后一位,这种方法适用于 JavaScript,认为移动这么多没有意义。事实上,如果你一开始就可以写= 0,那么执行这些计算是没有意义的。
【解决方案3】:
原因是移位计数被认为是模 32。
这本身会发生,因为(我猜)这是当今最常见的台式机/笔记本电脑硬件 (x86) 的工作方式。
这本身的发生是因为....好吧,只是因为。
在某些情况下,这些班次限制确实很烦人......例如,我认为最好只有一个班次操作员,根据计数的符号在两个方向上工作(如ASH 适用于Common Lisp)。