javascript位操作符会把数值转换成32位的整数再执行操作,最后再把结果转回64位。所以结果只能是32位整数能表示的范围了。

解决方案 »

  1.   

    为什么我alert((2<<32))是2不是0.
      

  2.   


    我回答错了,这是移位溢出的问题。我开始以为数据太大,JS表示不了。
    你真要计算2<<32 直接算不行,2<<32不就是2的33方么, 这样可以啊 (2<<29)*(2<<2)不就可以了 
      

  3.   

    why??为什么是这啊?
    不是844640829>>4吗?怎么成844640829*16了??
    那844640829>>32怎么求啊??
      

  4.   

    var rem=(844640829*16)* (2 << 3) * (2 << 3) * (2 << 3)* (2 << 3) * (2 << 3) * (2 << 3) * (2 << 3);是3627704737421328400而 C#上的844640829>>32是3627704737421328384为什么?
      

  5.   

    楼主我来挖坟了今天刚在js中也遇到了这个问题,-32>>>结果为536870908百思不得其解,进过各种推测与实验,得知计算机代码中4294967296代表0,4294967296则表示1,4294967295则表示-1,你可以定义一个变量将4294967296赋给它,然后输出他,就会发现就是等于0,所以你的结果并没有溢出,而且是正确的,4294967296代表0具体为什么我目前也还不清楚,望哪位大神给于讲解。。