32位的int型与double型表示的数值范围为何不一样?

2024-11-17 21:28:57
推荐回答(3个)
回答1:

int表示整数,Double表示双精度浮点数。
1、int
同样的32位,如果表示整数也就是没有小数位,那么可以表示的整数范围大约是 ±2的31次方-1,差不多就是int的表示范围;
2、Double
而对于浮点数,比如根据IEEE754浮点数表示方法中规定了,32位浮点数,第1位是符号位,第2到9位(共8位)表示阶码,剩下23位表示尾数。
那什么是阶码?比如,我们一个十进制数123可以表示为1.23X10的2次方,那么这里的2次方就可以理解为阶码。
那么8个bit的数位,可以表示多大的阶码呢?阶码也是有符号位的,那么8个bit的有符号位的数的取值范围是-127到128之间,而阶码是以2为底数的,所以阶码值-127就表示2的-127次方,就表示很小很小的一个小数了,而+128就表示2的128次方这么大的数了。
浮点数的尾数左边隐含一个数字1,也就是1.000...000(23个0)到1.111...111(23个1)二进制数表示的小数,差不多理解为1.00000到1.999999之间的十进制小数。
因此:浮点数就可以表示为 (2的-127次方)*1.x 到 (2的128次方)*1.x,大约是1.7*10的-38次方 到 3.4*10的38次方。
(因为涉及到反码和补码等的转换,以上数值均为约数,不能作为正式的参考,只是让你理解一下32位为什么表示的整型数和浮点数范围差别会那么大。不知道我说的是不是正确的,但是大致意思如此,你要完全弄清楚,可以查看一下IEEE754浮点数的表示规则。)

回答2:

int与doule在不同的系统数值范围不一样,有的系统int是16位,double是32位,有的系统int是32位,double是64位。但是同一系统中int与double数值范围肯定不一样的。

回答3:

十根手指有长短啊