Aman920_ 2017-07-30 02:33 采纳率: 66.7%
浏览 3092
已采纳

js中移位0位是什么操作,为什么值就变了

图片说明
图片中是在浏览器控制台下测试的,为什么有的移位0位值变了,有的却没有呢

  • 写回答

2条回答 默认 最新

  • lzl_Avery 2017-07-30 06:06
    关注

    来我来给你解释吧,js中变量定义是var吧? 所以当一个数比较大的时候它直接认为是长整型或者其它类型

    所在 Math.pow(2,31)是整型结果是正整数也就是你的那个结果, 但是当它作位移运算的时候转为了int类型
    int类型4个字节32位,从-2的31次方到2的31次方-1这个范围, 而正整数 2的31次方刚好是超过2的31次方-1
    ,而我们知道 数据在计算机中是以补码存放的 最高位的1 0 表示正负,1表负,2的31次变为有符好的整型
    高位为刚好为1 所以就成负数了, 而2的32次方刚好是10000....000 32个0 刚好进位转为int的时候刚好
    最高位33位的1溢出了所以结果为0 而长整型就没有这个问题。。 在如在c语言中也有相同的例子
    如char在c语言中1个字节8位 最大表示范围0-255 你若 char a=128 整型输出为负数 是一个道理

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?