【C语言】给定范围整数-127~128的整数,统计了求它的原码、反码、补码的二/十进制

   

#include<stdio.h>
#include<math.h>
int mmmm(int n);//求三个码的 
int nnnnnnn(int n[],int m); //n为二进制数,sum为每一位计算所加的和
void main()
{
    int s,n=-127;
    int m=128;
    printf("请输入一个左范围整数: ");
    //scanf("%d",&n);
    printf("请输入一个右范围整数: ");
    //scanf("%d",&m);
    printf("\n整数\t原码 二/十进制\t\t");
    printf("反码 二/十进制\t\t");
    printf("补码 二/十进制\n");    
    //mmmm(-0);//报错 
    //mmmm(+0);
    while(n<=m)
    {
        s=n;
        if(((-130<s)&&(s<=-118))||((-14<s)&&(s<14))||((118<=s)&&(s<130)))
        mmmm(s);
        n++;
    }
}
int nnnnnnn(int n[],int m)
{   int sum=0,p=1;         //n为二进制数,sum为每一位计算所加的和,p为位权
    int i=0;                            //输入该二进制数
    while(i<=7)               //循环条件为n,即二进制数n在不为0的时候程序一直成立
     { 
        sum+=n[i]*p;       //数字中所有位乘以本位的位权再加和
           p*=2;                //位权随着位的变化依次增加
           i++;
      }             //进行下一位的输出
    printf(" %3d",sum);
}


int mmmm(int n)
{
        int m,a[10],i=0,y[100],f[100],b[100],j,k;
        m=abs(n);
        while (m!=0)
        {
            a[i]=m%2;
            m=m/2;
            i=i+1;
        }
        if (n>=0)
        {
            for(j=0;j<i;j++) y[j]=a[j];
            if ((j+1)%8!=0) 
            for(;(j+1)%8!=0;j++) y[j]=0;
            y[j]=0;
            for(k=0;k<=j;k++)
            {
                f[k]=y[k];
                b[k]=y[k];
            }
        }
        else
        {
            int w=0;
            for(j=0;j<i;j++) y[j]=a[j];
            if ((j+1)%8!=0) 
                for(;(j+1)%8!=0;j++) y[j]=0;y[j]=1;
            for(k=0;k<j;k++) if(y[k]) f[k]=0;
            else f[k]=1;f[k]=1;
                for( k=0;k<j;k++)
             {
                 if (k==0)b[k]=f[k]+1;
                 else b[k]=f[k]+w;
                if (b[k]==2)
                 {b[k]=0;w=1;}
                else w=0;
            }
        b[k]=1;
        }
        if(n==118)
            printf("  ...\t.....\t\t\t....\t\t\t....\n");
        printf("%5d\t",n);
        for(k=j;k>=0;k--)printf("%d",y[k]);
        nnnnnnn(y,8);printf("\t\t");
        for(k=j;k>=0;k--)printf("%d",f[k]);
        nnnnnnn(f,8);printf("\t\t");
        for(k=j;k>=0;k--)printf("%d",b[k]);
        nnnnnnn(b,8);
        printf("\n");
        if(n==-118)
            printf("  ...\t.....\t\t\t....\t\t\t....\n");
        
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值