double和int类型的转换

double res=12345678901.0;
int a=res;//static_cast<int>(res);
cout<<a;
为什么a的结果是负数,超过11位的转换发生了什么,谁来告诉我
为什么我的问题都没人能准确的答出来呢= =

这个就是溢出
每一种数值数据类型都有它的表示范围
如unsigned char,占一个字节,可以表示0到2^8-1=255的数值
int型分配4个字节,你自己算一算

你把double型的转换成int型,首先会失去小数部分,第二个可能会截掉double的超出部分的位
如果赋值后,int的最高位为1,那么它就会变成负数,详阅 数据在计算机中的表示
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-23
超过11位会用最大数减去这个数,当然是负数追问

为什么是11位

第2个回答  2013-11-23
int 的最大数是六万多,你把这么大的数值给它就溢出了,所以就出错了