js中一个小数与其他数字进行或运算结果为整数,求指教?

javascript中一个小数与其他数字进行或运算,为什么结果是一个整数?

var a = 1.21;
a.toString(2) //1.00110101110000101000111101011100001010001111010111
var b = 0;//0
a|b//结果为1

按理说

   1.21    1.00110101110000101000111101011100001010001111010111
   0.00    0.00000000000000000000000000000000000000000000000000
   -------------------------------------------------------------------------
 |(或运算)  1.00110101110000101000111101011100001010001111010111
 
 结果不应该还是1.21吗?为什么是1呢 ?求指教
阅读 2.6k
2 个回答

事实上,JS的所有数据都是 double 型的,也就是64位浮点型,并按照IEEE754标准进行保存。

但是在做位运算的时候要对两个数进行 toInt32 进行类型转换(>>>toUint32), 然后按照32位整型的bits 进行位运算,运算结果也是按照Int32或是Uint32 进行解释,再转换成double

function toUint32(x) { return x>>>0;}
function toInt32(x) { return x>>0;}

toUint32(-1); // 4294967295 === 2^32 - 1
toInt32(-1); // -1
toInt32(1.21); // 1

具体可一参考 ES标准:http://www.ecma-international...

位运算不支持小数,会向下取整

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题