This question already has answers here:
Why does a shift by 0 truncate the decimal?
(5个答案)
在4个月前关闭。
当您有一个浮点数,例如10.1,并且在JavaScript中使用零填充左移运算符(<
这是一些显示我意思的源代码:
为什么会这样?
(5个答案)
在4个月前关闭。
当您有一个浮点数,例如10.1,并且在JavaScript中使用零填充左移运算符(<
这是一些显示我意思的源代码:
var num1 = 958.51243
console.log(num1) // 958.51243
console.log(num1 << 0) // 958
为什么会这样?
最佳答案
请参见docs:
所有的按位运算符的操作数均以二进制补码格式转换为带符号的32位整数,但零填充右移会导致无符号的32位整数。
因此,在执行该操作之前,这些数字将转换为整数。
对于左移,在官方规范here中进行了描述:
6.1.6.1.9 Number :: leftShift(x,y)
让lnum成为! ToInt32(x)。
让rnum成为! ToUint32(y)。
(...执行操作...)
ToInt32的作用:
抽象操作ToInt32将参数转换为-2 ^ 31至2 ^ 31-1(含)范围内的2 ^ 32整数值之一。
09-27 19:07