JS处理32位整型位运算
32位整数运算
首先要清楚,在JS中无论是整数还是小数都是按照64位的浮点数形式存储,而整数运算会自动转化为32位有符号整数。
有符号整数使用 31 位表示整数的数值,用第 32 位表示整数的符号,0 表示正数,1 表示负数。数值范围为 [-2^31 , 2^31-1], 即[ -2147483648 , 2147483647 ]。
JavaScript 进行位操作时,采用32位有符号整型,这意味着其转换的结果也是32位有符号整型。 有时我们进行移位会由于符号的存在产生与c语言无符号整数不一样的结果。
针对该问题,我们可以把JavaScript 中的有符号数,转换成无符号数。只需要进行 >>>0 移位操作就好了。
超过32位整数运算
当我们要进行大数运算时,超出范围的高字节部分会被截掉,此时该如何处理?
由于JS每次最多只能处理32位的位运算,那么对于大数我们可以采用分段来处理,使得每一段都在范围之内。