c语言数据int和float的问题。。
在c语言中,假如是一个32位的机器,一个int型和一个float型的数据都占32位。但是范围却不一样。int型会比float会高,这个确实很难理解。。float的精度比i...
在c语言中,假如是一个32位的机器,一个int型和一个float型的数据都占32位。但是范围却不一样。int型会比float会高,这个确实很难理解。。float的精度比int型大,表示的数据范围却还比int型大很多。。有高人解释一下吗??
在c语言中,假如是一个32位的机器,一个int型和一个float型的数据都占32位。但是范围却不一样。float的精度比int型大,表示的数据范围却还比int型大很多。。有高人解释一下吗??既然float比int型高,那为什么不直接用float代替int呢。这种表示应该有什么弊端吧。按照float这种表示方法,我也可以直接用两位表示一个很大的数啊。。在运算的时候机器怎么处理float这种数据呢?? 展开
在c语言中,假如是一个32位的机器,一个int型和一个float型的数据都占32位。但是范围却不一样。float的精度比int型大,表示的数据范围却还比int型大很多。。有高人解释一下吗??既然float比int型高,那为什么不直接用float代替int呢。这种表示应该有什么弊端吧。按照float这种表示方法,我也可以直接用两位表示一个很大的数啊。。在运算的时候机器怎么处理float这种数据呢?? 展开
3个回答
展开全部
float在内存里也是4个字节这四个字节和int的那种指定是不一样的 虽然都是0和1 但是指定有某些位是表示点的位置的 某些位是表示是多少次方的,这些都可能是硬性规定的,所以就实现了你说的这种情况被 举个例子 都是1个字节8位 如果前面5位都表示数 后面3位 标示数的指定没有表示次方的范围大啊,我也是感觉是这样,具体是不是真这样实现 不确定
你也说了float比int精度大么,在不要求经度的时候int比float的范围广,大多数情况下有小数点的情况还是少的,int用的多啊,也就是说大多数情况下是不需要精度的,在不需要的情况下非用几位表示幂指数,用几位表示小数点的位置不是很浪费么,这个就好比unsigned int 和int的区别是的,很多时候不是int就不能替代unsigned int 在0的时候他们是等价的 ,但是int的范围就小了一半啊,所以大于0的情况下 我就总用unsigned了
下面这个是我在网上找的 你看看
类型 存储位数 总位数 偏移值(offset) 数符(S) 阶码(E) 尾数(M)
短实数(float) 1 8 23 32 127
长实数(double) 1 11 52 64 1023
N (10) = 123.456,
换算成二进制表示:
N (2) = 1111011. 01110100101111001
= 1. 11101101110100101111001(...) * 2^6
那么E – 127 = 6; E = 127 + 6 = 133(10) = 10000101(2)
M = 111 0110 1110 1001 0111 1001 (省略了最高数字位1, 共23bit)
组合起来就是:
S E M
0 10000101 111 0110 1110 1001 0111 1001
4bit一间隔:
0100 0010 1111 0110 1110 1001 0111 1001
4 2 F 6 E 9 7 9
你也说了float比int精度大么,在不要求经度的时候int比float的范围广,大多数情况下有小数点的情况还是少的,int用的多啊,也就是说大多数情况下是不需要精度的,在不需要的情况下非用几位表示幂指数,用几位表示小数点的位置不是很浪费么,这个就好比unsigned int 和int的区别是的,很多时候不是int就不能替代unsigned int 在0的时候他们是等价的 ,但是int的范围就小了一半啊,所以大于0的情况下 我就总用unsigned了
下面这个是我在网上找的 你看看
类型 存储位数 总位数 偏移值(offset) 数符(S) 阶码(E) 尾数(M)
短实数(float) 1 8 23 32 127
长实数(double) 1 11 52 64 1023
N (10) = 123.456,
换算成二进制表示:
N (2) = 1111011. 01110100101111001
= 1. 11101101110100101111001(...) * 2^6
那么E – 127 = 6; E = 127 + 6 = 133(10) = 10000101(2)
M = 111 0110 1110 1001 0111 1001 (省略了最高数字位1, 共23bit)
组合起来就是:
S E M
0 10000101 111 0110 1110 1001 0111 1001
4bit一间隔:
0100 0010 1111 0110 1110 1001 0111 1001
4 2 F 6 E 9 7 9
展开全部
这样子来讲:float和int都是固定长度的,4字节(32位机子)
int是精确的,超出范围就溢出了。数据错误了。
二float并不是单纯的101010这样存储,是把4个字节划分为
符号位,指数位,尾数位
3个部分固定的,因为有指数,存储的范围当然比int大了。
但是3个部分也有范围限制,所以当你精度值越大时,月不精确了。
int是精确的,超出范围就溢出了。数据错误了。
二float并不是单纯的101010这样存储,是把4个字节划分为
符号位,指数位,尾数位
3个部分固定的,因为有指数,存储的范围当然比int大了。
但是3个部分也有范围限制,所以当你精度值越大时,月不精确了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
他们表示数的方法不同
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询