You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 11:32:37