图片中是在浏览器控制台下测试的,为什么有的移位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 整型输出为负数 是一个道理本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 3无用