double和int类型的转换

doubleres=12345678901.0;inta=res;//static_cast<int>(res);cout<<a;为什么a的结果是负数,超过11位的转换发... double res=12345678901.0;
int a=res;//static_cast<int>(res);
cout<<a;
为什么a的结果是负数,超过11位的转换发生了什么,谁来告诉我
为什么我的问题都没人能准确的答出来呢= =
展开
 我来答
jkla139
2013-11-25 · TA获得超过619个赞
知道小有建树答主
回答量:347
采纳率:100%
帮助的人:251万
展开全部
这个就是溢出
每一锋辩种数值数据类型都有它的表示范围
如unsigned char,占一个字节,可以表示0到2^8-1=255的数值
int型分配4个字节,你自己算一算

你把double型的转换成int型,首先会失去小数部分,第二个可能会截掉double的银灶缺超出部分的位
如果赋值后,int的最高位为1,那么辩颤它就会变成负数,详阅 数据在计算机中的表示
fk...n@21cn.com
2013-11-23 · 超过12用户采纳过TA的回答
知道答主
回答量:77
采纳率:0%
帮助的人:34.8万
展开全部
超过11位会用最大数减去这个数,当然是负数
追问
为什么是11位
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-11-23
展开全部
int 的最大数是六万多,你把这么大的数值给它就溢出了,所以就出错了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式