源码,反码,补码怎么做?yangtuoyu的博客

#include<bits/stdc++.h>
using namespace std;
int a[10001],b[10001],c[10001];//a是存放二进制的,b是补码,c是反码
int main(){
    int n;
    cin>>n;
    if(n==0){
        cout<<"00000000000000000000000000000000"<<endl;//0特殊处理
        cout<<"00000000000000000000000000000000"<<endl;
        cout<<"00000000000000000000000000000000";
    }
    if(n>0){
        int m=0;
        int t=n;
        while(n>0){
            a[m]=n%2;
            n=n/2;
            m++;
        }//除法,求二进制的方法之一
        for(int i=31;i>=0;i--){
            cout<<a[i]; 
        }
        cout<<endl;//输出源码
        for(int i=31;i>=0;i--){
            cout<<a[i]; 
        }
        cout<<endl;//输出补码
        for(int i=31;i>=0;i--){
            cout<<a[i]; 
        }//输出反码
    }//正数情况下源码,补码,反码一样
    if(n<0){//负数情况
        a[31]=1;//改变符号位
        int m=0;
        int t=n;
        n=abs(n);//变正数
        while(n>0){
            a[m]=n%2;
            n=n/2;
            m++;
        }//除法,求二进制
        for(int i=31;i>=0;i--){
            cout<<a[i];
        }
        cout<<endl;//输出源码
        for(int i=31;i>=0;i--){
            if(i==31){
                cout<<a[i];
                continue;
            }//符号位特殊处理
            if(a[i]==1){
                c[i]=0;
                b[i]=0;
            }else{
                c[i]=1;
                b[i]=1;
            }
        }//数字对换,0变1,1变0,求反码
        if(b[0]==0){
            b[0]=b[0]+1;//是0的话就加一
        }else{
            b[0]=b[0]+1;
            for(int i=0;i<=31;i++){
                if(b[i]>1){
                    b[i]=0;
                    b[i+1]=b[i+1]+1; 
                }
            }
        }//否则进位
        for(int i=31;i>=0;i--){
            if(i==31){
                continue;
            }
            cout<<b[i];
        }//输出除符号位以外的数
        cout<<endl;
        cout<<"1";//输出符号位
        for(int i=31;i>=0;i--){
            if(i==31){
                continue;
            }
            cout<<c[i];
        }//输出除符号位以外的数
    }
}

代码比较复杂,需要花多一些时间去查看

posted @ 2021-08-13 16:14  yangtuoyu  阅读(191)  评论(0)    收藏  举报