为什么在JavaScript中使用<< 0可以去除数字的小数部分?
为什么在JavaScript中使用
<< 0可以提取浮点数的整数部分? 嘿,这个问题问得很有意思!其实这背后是JavaScript位运算的核心特性在起作用,我给你拆解清楚:
位运算只处理32位整数:JavaScript里的所有位运算符(包括左移
<<),执行时都会先把操作数强制转换成32位有符号整数。转换规则特别直接:直接舍弃浮点数的小数部分,只保留整数部分(符号位会完整保留,所以负数场景也适用)。<< 0等于“原地转换”:左移0位这个操作本身不会改变整数的数值——任何数左移0位都还是它自己。把这两点结合起来,num << 0就相当于先把浮点数num转成32位整数(砍掉小数),再原样返回,最终结果自然就是原浮点数的整数部分了。
举几个实际例子验证下:
var num1 = 958.51243; console.log(num1); // 输出 958.51243 console.log(num1 << 0); // 输出 958 // 负数的情况也成立 var num2 = -123.45; console.log(num2 << 0); // 输出 -123
不过要注意一个坑:如果浮点数的整数部分超出了32位有符号整数的范围(也就是大于2^31 - 1即2147483647,或者小于-2^31即-2147483648),用<< 0会导致溢出,结果就不符合预期了。比如:
var bigNum = 2147483648.9; console.log(bigNum << 0); // 输出 -2147483648(溢出后的异常结果)
内容的提问来源于stack exchange,提问作者Hays Stanford
相关产品推荐
相关产品推荐

