double和int类型的转换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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,那么它就会变成负数,详阅 数据在计算机中的表示
参考技术A 超过11位会用最大数减去这个数,当然是负数追问

为什么是11位

参考技术B int 的最大数是六万多,你把这么大的数值给它就溢出了,所以就出错了

以上是关于double和int类型的转换的主要内容,如果未能解决你的问题,请参考以下文章

请问double型可以强制转换成int型吗?

c#中怎么把double类型转换成int类型

在C#中如何将int类型强制转换为double类型

在C语言中Int和double怎么转换?

MFC中如何吧CString类型转换为double或int型??

MFC中如何吧CString类型转换为double或int型?