| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1229 人关注过本帖
标题:新手观察int和float型 上溢下溢,求助
只看楼主 加入收藏
WDMZJLJ12
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2017-10-4
收藏
 问题点数:0 回复次数:2 
新手观察int和float型 上溢下溢,求助
我的代码是
#include <stdio.h>//观察int float上溢下溢  int最大值:2147483647    最小值:-2147483648 float最大值:3.402823e+038       最小值1.175494e-038
int main (void)
{
    int x=2147483647,y=-2147483648;
    float a=3.402823e+038,b=1.175494e-038;
    x=x+1;
    y=y-1;
    a=a*10;
    b=b/10;
    printf("x+1=%d     y-1=%d\n",x,y);
    printf("a+1=%e     b-1=%e\n",a,b);
   
    return 0;
}



然后输出的结果是x+1=-2147483648     y-1=2147483647
a+1=1.#INF00e+000     b-1=1.175493e-039


看不懂这个结果,希望大神帮忙看看,感激不尽
搜索更多相关主题的帖子: int float 最大值 printf 结果 
2017-10-04 18:49
pydlq
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:129
专家分:488
注 册:2017-9-5
收藏
得分:0 
这个是二进制存储的问题。你自己算算就知道了
2017-10-04 21:18
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:0 
    int x = 2147483647;  
    int y = -2147483648;
    x == 0x7FFFFFFF == 0b01111111111111111111111111111111
    y == 0x80000000 == 0b10000000000000000000000000000000
    x+1 == 0x7FFFFFFF+1 == 0x80000000 == 0b10000000000000000000000000000000 == y == -2147483648
    y-1 == 0x80000000-1 == 0x7FFFFFFF == 0b01111111111111111111111111111111 == x == 2147483647

    float类型内存存储:符号S + 指数E + 尾数M, S(1bit) + E(8bit) + M(23bit) = 32bit
    float a=3.402823e+038;
    a是最大值的话,a*10对于float类型来说已经溢出不是一个数了。float类型是有符号,最小值也应该是-3.402823e+038。
    a*10 = 3.402823e+039,在内存存储的指数 E(8bit)为11111111。
    当 E(8bit)为11111111时,如果尾数 M 全为0时,表示±无穷大(取决于符号位),否则表示已经溢出不是一个数。
    float b=1.175494e-038;
    b/10 = 1.175494e-039,在内存存储的指数 E(8bit)为00000000。
    当 E(8bit)为00000000时,E=1-127,尾数 M 最高位不加上恒定的1,而是原本的0.xxxxxxxx小数,这样为了表示 0 和一些很小的整数。
收到的鲜花
  • 九转星河2017-10-05 09:58 送鲜花  20朵   附言:好文章
2017-10-05 06:38
快速回复:新手观察int和float型 上溢下溢,求助
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027041 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved