| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6163 人关注过本帖
标题:-2147483648的补码怎么算?
取消只看楼主 加入收藏
edwardflee
Rank: 4
等 级:业余侠客
帖 子:145
专家分:234
注 册:2011-7-27
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:1 
-2147483648的补码怎么算?
在学《C程序设计》,练习编了个小程序计算int型数的补码。
按书上的方法,负数先求绝对值,然后写成二进制,在各位取反后加1
我试了试,别的都行,最小数-2147483648算出来不对,貌似一取绝对值就已经溢出了吧?
怎么办?还用这种方法计算?还是这个数有别的计算方法?
程序代码:
/*
时间:2011年9月30日15:41:07
目的:练习补码的计算方法
*/
# include <stdio.h>

int main()
{
    int x;
    int i;
    int a[32];
    printf("输入一个数\n");
    scanf("%d",&x);
   
    if (x>=0)
    {
        a[0]=0;                                //正整数计算补码
        for(i=31; i>0; --i)
        {
            a[i]=x%2;
            x /= 2;
        }
    }
    else
    {
        x = -1*x;                            //取绝对值
        a[0]=0;                                //按正整数计算补码
        for(i=31; i>0; --i)
        {
            a[i]=x%2;
            x /= 2;
        }
        for(i=0; i<32; ++i)                    //逐位取反
        {
            a[i] = !a[i];
        }
        for(i=31; i>=0; --i)                //+1
        {
            if(0==a[i])
            {
                ++a[i];
                break;
            }
            else
            {
                --a[i];
                continue;
            }
        }
    }
   
    printf("补码是:\n");
    for(i=0; i<32; ++i)
    {
        printf("%d",a[i]);
        if(3 == i%4)
        {
            printf(" ");
        }
    }
    printf("\n");
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
输入一个数
-2147483648
补码是:
0000 0000 0000 0000 0000 0000 0000 0000
Press any key to continue
————————————
*/

搜索更多相关主题的帖子: C程序设计 取绝对值 计算方法 二进制 
2011-09-30 15:48
edwardflee
Rank: 4
等 级:业余侠客
帖 子:145
专家分:234
注 册:2011-7-27
收藏
得分:0 
回复 2楼 thlgood
好呀好呀,等你啦美女

学C的秘诀=每天都来泡论坛
2011-09-30 16:28
快速回复:-2147483648的补码怎么算?
数据加载中...
 
   



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

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