| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 796 人关注过本帖
标题:请教一个简单的问题 关于数据溢出
只看楼主 加入收藏
gxikings
Rank: 1
等 级:新手上路
帖 子:11
专家分:3
注 册:2009-10-29
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:4 
请教一个简单的问题 关于数据溢出
请各位高手,讲解一下关于数据溢出的原理。

#include "stdio.h"
main()
{
     int a,b;
     a=32767;
     b=a+1;
     
      printf("%d,%d",a,b);
}
以此题为例。  用TC2.0来运行。

我们都知道,在TC2.0中,整型的取值范围是2的15次方到2的15次方-1,那么也就是-32768~32767,数据溢出,是根据在内存中的2进制形式造成的。整形是2个字节,也就是16位,能表示的最小数为:10000000000 (即-32768),能表示的最大数为:0111111111111111(即32767),注:最高位为符号位。当32767+1之后,2进制也就变成了1000000000000000,那么我们能看出来,就是-32768,可是,怎么算出来的呢??

我要的是步骤。
负数是以补码存放的。 补码=原码的反码+1   ;   请高手,帮我写一下运算的过程。

[ 本帖最后由 gxikings 于 2010-3-9 17:22 编辑 ]
搜索更多相关主题的帖子: 数据 
2010-03-09 17:20
ldg628
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:3
帖 子:526
专家分:3036
注 册:2009-6-23
收藏
得分:5 
int OutPutBinary(int m)
{
    int size = sizeof(m)*8;
    int bit;
    while(size--)
    {
        bit = (m >> size)&1;
        printf("%d", bit);
    }
    printf("\n");
}
输出数据的二进制,我不明白你要的什么运算过程,补码换算吗
2010-03-09 18:06
it的脚本小孩
Rank: 1
等 级:新手上路
帖 子:12
专家分:6
注 册:2007-11-4
收藏
得分:5 
a=32767;这里a二进制代码为0111 1111 1111 1111
b=a+1;这里b二进制代码为1000 0000 0000 0000

以上说的都是计算机中存储形式,即补码。
换成原码a=32767;b=-32768;
2010-03-09 19:30
江河
Rank: 1
等 级:新手上路
帖 子:6
专家分:8
注 册:2010-3-9
收藏
得分:5 
int 默认的是32位?还是16位 short int
2010-03-10 11:48
mywaylgh
Rank: 8Rank: 8
来 自:厨房
等 级:蝙蝠侠
威 望:5
帖 子:188
专家分:729
注 册:2010-3-10
收藏
得分:5 
tc没用过.....

人生就像茶几 上面放着许多杯具

人生也像厨房 里面总有一些洗具
2010-03-10 13:42
快速回复:请教一个简单的问题 关于数据溢出
数据加载中...
 
   



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

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