alert(634338432000000000 &4611686018427387903);返回0,按位于操作应该是634338432000000000,精度问题?求解

解决方案 »

  1.   

    alert(2147483647&0xffffffff)
    alert(2147483648&0xffffffff)
      

  2.   

    这么大数字,只有float才能表示吧,位运算只对整形的。
      

  3.   

    数字大了以后,有时候(未严格验证),4倍数字节的首位是1,会被当成负数处理,会有一些莫名其妙的问题,不清楚js引擎的代码里面怎么实现的。大数还得靠自己搞。以6个字节的整数为例:
    document.writeln(0xFFFFffffFFFF & 0xFFFFffffFFFF) 的结果是 -1,因为它的4倍数字节(从后面往前数,第4个字节是ff)的首位是1,于是被当成负数了.
    所以下面
    document.writeln(0x????ffffFFFF & 0xFFFFffffFFFF) (?用任何0-F代替)的结果都是 -1
    document.writeln(0x????7fffFFFF & 0xFFFFffffFFFF) 倒数第4个字节是7f,首位是0,所以能得到一个正数形式,但也并不正确,因为不管"?"是什么,它总是输出 2147483647 (2147483647==0x7fffFFFF)总结:超过4个字节的整数,不要用js的“位与”运算