| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 768 人关注过本帖
标题:C语言中数值溢出的解释
只看楼主 加入收藏
gobraves
Rank: 2
等 级:论坛游民
帖 子:46
专家分:16
注 册:2013-8-3
结帖率:88.89%
收藏
已结贴  问题点数:10 回复次数:5 
C语言中数值溢出的解释
如果说短整型的长度是2个字节,
short int a;
a=32768;
printf("%d",a);
输出是-32768
我是这样想的:
在编译器中它以二进制表示就是10……00(1后面15个0),机器会认为是负数,然后就会按其绝对值的二进制表示即011……1(0后15个1),然后取反,就成了10……00(1后面15个0),然后加1,就变成了-1,但为什么是-32768??
搜索更多相关主题的帖子: 编译器 二进制 C语言 绝对值 
2014-02-01 23:00
Cor
Rank: 2
来 自:江苏南通
等 级:论坛游民
帖 子:17
专家分:59
注 册:2014-1-23
收藏
得分:5 
    你把二进制码的知识看看,变量a的二进制码就是1000 0000 0000 0000,这个代表的就是-32768

均衡
2014-02-02 12:47
yangt
Rank: 2
等 级:论坛游民
帖 子:49
专家分:20
注 册:2012-11-28
收藏
得分:0 
是不是第一位1代表-、0代表+?
我以为二进制码 0000 0000 0000 0000,这个代表的是0;二进制码 1111 1111 1111 1111,这个代表的是-32678;二进制码 0111 1111 1111 1111,这个代表的是32678。
我的理解对吗,各位大神哥哥!

自己回答吧,正数是对的,负数不对。
二进制码 1000 0000 0000 0000 到 1111 1111 1111 1111 对应 十进制 -32678 到 -1 。


[ 本帖最后由 yangt 于 2014-2-5 00:12 编辑 ]
2014-02-04 23:34
esc345
Rank: 2
等 级:论坛游民
帖 子:25
专家分:45
注 册:2014-1-27
收藏
得分:5 
就像汽车公里表 99999后面就是00000 当达到最大值 会溢出到起点
2014-02-05 17:52
blanie
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2014-2-4
收藏
得分:0 
两个字节
32768储存为 1000 0000 0000 0000 理应第一位为零表正数,但数太大不就占了么
反码        0111 1111 1111 1111
+1          1000 0000 0000 0000 为-32768的补码
所以输出为补码1000 0000 0000 0000所对应的数-32768

人生如逆旅,我亦是行人……
2014-02-05 21:02
MusicSky
Rank: 2
等 级:论坛游民
帖 子:10
专家分:19
注 册:2013-7-16
收藏
得分:0 
用中国话解释,物极必反
楼上说的对
就像汽车表,到了9999就是0000
2014-02-06 04:54
快速回复:C语言中数值溢出的解释
数据加载中...
 
   



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

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