为什么我用C++计算比较大的数字的乘法算出来就不对.算出来这样的99789*915575=1170000459,明显错的嘛

来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/18 17:58:38
为什么我用C++计算比较大的数字的乘法算出来就不对.算出来这样的99789*915575=1170000459,明显错的嘛为什么我用C++计算比较大的数字的乘法算出来就不对.算出来这样的99789*9

为什么我用C++计算比较大的数字的乘法算出来就不对.算出来这样的99789*915575=1170000459,明显错的嘛
为什么我用C++计算比较大的数字的乘法算出来就不对.
算出来这样的99789*915575=1170000459,明显错的嘛

为什么我用C++计算比较大的数字的乘法算出来就不对.算出来这样的99789*915575=1170000459,明显错的嘛
C++ 变量超出范围截断当给16位的unsigned short 对象赋值100000,赋的值是什么?
C++ primer参考答案是:
100000超过了16位的unsigned short类型的表示范围,编译器对其二进制表示截取低16位,相当于对65536求余(求模,%),得34464.
可能很多人不明白为什么要与65536求余,事实上:我们要取的是低十六位二进制数,超过的高进位部分全部去掉,而17位以上(包括17位)都将去掉,而17位二进制数是1 0000 0000 0000=65536
如果这个赋值数转化为二进制不是恰好17位而是18位19位...同样可以这样求余运算,原因是:高于17位都是65536的倍数(0倍或2倍),二进制是把每位的数加起来成为十进制,这样求模加法法则可知
最后高于十六位的与65536求余得到的都为0,剩下的不就是低十六位了.