如何左移大于 32 位的数字?
How to left-shift numbers greater than 32-bits?
据我了解,JS 在执行位移操作时将数字视为 32 位,即使它支持 64 位数字。
如何实现适用于 64 位数字的 leftShift
函数?也就是说,对于 192 << 24
之类的东西,它不会转入底片(应该是 3221225472
,而不是 -1073741824
)。
就像 left shift 的数学运算一样:
Arithmetic shifts are equivalent to multiplication by a positive (to the left) or by a negative number (to the right), integral power of the radix (e.g. a multiplication by a power of 2 for binary numbers).
function shift(number, shift) {
return number * Math.pow(2, shift);
}
shift(192, 24)
//3221225472
shift(3221225472, -24)
//192
据我了解,JS 在执行位移操作时将数字视为 32 位,即使它支持 64 位数字。
如何实现适用于 64 位数字的 leftShift
函数?也就是说,对于 192 << 24
之类的东西,它不会转入底片(应该是 3221225472
,而不是 -1073741824
)。
就像 left shift 的数学运算一样:
Arithmetic shifts are equivalent to multiplication by a positive (to the left) or by a negative number (to the right), integral power of the radix (e.g. a multiplication by a power of 2 for binary numbers).
function shift(number, shift) {
return number * Math.pow(2, shift);
}
shift(192, 24)
//3221225472
shift(3221225472, -24)
//192