| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5742 人关注过本帖
标题:整型数据的溢出问题
只看楼主 加入收藏
qinyuanguang
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-4-28
收藏
 问题点数:0 回复次数:17 
整型数据的溢出问题
刚刚开始学习C语言,看的是谭浩强的C语言设计,里面有个问题看不懂烦请各位看一下:
整型数据的溢出问题:
main()
{   int a,b;
    a=32767;
    b=a+1;
    printf("%d,%d",a,b);
}

运行结果为: 32767,-32768
如果要为正32768,需要把变量b改为long型就可以得到预期的结果32768.
修改程式为:
main()
{   int a;
    long b;
    a=32767;
    b=a+1;
    printf("%d,%d",a,b);
}

为何得到的结果是32767,0呢?请问是哪里出现了问题了?谢谢大家.
搜索更多相关主题的帖子: 整型 数据 
2008-11-21 12:58
nianshi
Rank: 1
等 级:新手上路
帖 子:199
专家分:0
注 册:2007-11-7
收藏
得分:0 
main()
{   int a;
    long b;
    a=32767;
    b=a+1;
    printf("%d,%d",a,b);
}

为何得到的结果是32767,0 结果是32767和0吗 按说应该是32768啊
你试着把b=a+1;改为b=(long)a+1; 试试

行至水穷处 坐看去起时
C语言QQ群1:51871776  群2:26313099  群3:47145282
2008-11-21 15:14
jlu11jj
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-11-21
收藏
得分:0 
2008-11-21 15:59
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1688
专家分:4262
注 册:2007-12-27
收藏
得分:0 
b=a+1L;
printf("%d,%ld",a,b);

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2008-11-21 17:29
zqy110007
Rank: 3Rank: 3
来 自:外太空
等 级:论坛游民
威 望:6
帖 子:1493
专家分:82
注 册:2008-11-19
收藏
得分:0 
肯定不行啦.
int 和 long 都想当于一个盒子
int 这个盒子小一些,所以最多装下32767,如果再大就会乱出来一个数.
long 就大些,long可以装下好几个亿的东西,对于几万来说不就是小事了?
当然,当你的数字大于 long 时,也会乱出来一个数.

每个人都是蛤蟆,只是井的大小不同罢了.
沙石下的泉水,挖得越深,泉水越清.
2008-11-21 17:39
jay6254825
Rank: 1
来 自:江西师范大学软件
等 级:新手上路
帖 子:54
专家分:0
注 册:2008-11-14
收藏
得分:0 
楼上有一半是错误的,结果并不是随机的!!!!!!!!!!
关于这个问题我曾经与老师探讨过,
这就要说到INT型的范围是-36728--32767
很好理解内存中表示形式(补码)1000000000000001  到0111111111111111
可以表示-32767--32768之间的任何数,但是却表示不了-32768,由此我向老师提出疑问,原来,-32768规定的补码就是
1000000000000000(规定,个人认为这法则LONG 也通用,只是不是-32768,而是 -(2的32次方)),那么根据补码运算,32767补码0111111111111111 加上1补码0000000000000001,得补码        1000000000000000,为-32768补码,输出-32768
附:好像-32768的原码也是1000000000000000

[[it] 本帖最后由 jay6254825 于 2008-11-21 17:59 编辑 [/it]]

                                       我是J!~~
2008-11-21 17:55
ma1ming
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-11-21
收藏
得分:0 
因为输出的并不是长整形,改成%ld
2008-11-21 17:56
zqy110007
Rank: 3Rank: 3
来 自:外太空
等 级:论坛游民
威 望:6
帖 子:1493
专家分:82
注 册:2008-11-19
收藏
得分:0 
回复6#我没有说是随机的吧...
我说的是乱出一个数字..
我知道,是固定的,但是也不完完全全..

每个人都是蛤蟆,只是井的大小不同罢了.
沙石下的泉水,挖得越深,泉水越清.
2008-11-21 17:59
jay6254825
Rank: 1
来 自:江西师范大学软件
等 级:新手上路
帖 子:54
专家分:0
注 册:2008-11-14
收藏
得分:0 
关于为何得到的结果是32767,0这个问题,
是由于溢出,%d只能表示16位,第一位符号位,第十七位被舍去

                                       我是J!~~
2008-11-21 18:13
jay6254825
Rank: 1
来 自:江西师范大学软件
等 级:新手上路
帖 子:54
专家分:0
注 册:2008-11-14
收藏
得分:0 
回复8楼,某些时候答案是会出现一个错误的随机数,也是固定的,但是却是无法推出来缘由,此程序有理可依,答案也可以推出来,与前者不同
8楼很强,14岁就编程了,我都快19岁了,刚大一

                                       我是J!~~
2008-11-21 18:16
快速回复:整型数据的溢出问题
数据加载中...
 
   



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

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