为什么我用C++计算比较大的数字的乘法算出来就不对.

为什么我用C++计算比较大的数字的乘法算出来就不对.
算出来这样的99789*915575=1170000459,明显错的嘛
刘毅小宝 1年前 已收到1个回答 举报

永遠ǒ縝嗳 幼苗

共回答了26个问题采纳率:92.3% 举报

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,剩下的不就是低十六位了.

1年前

1
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 16 q. 0.035 s. - webmaster@yulucn.com