源码,反码,补码怎么做?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];
        }//输出除符号位以外的数
    }
}

网上很少有这种,我查过,而且就算有,也比我的复杂,而且有一群人在抄袭,转载成自己的代码,希望大家支持此做法,也望不要有人再抄袭,转载成自己的代码了

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

上一篇:win8硬盘安装Ubuntu14.04双系统参考教程


下一篇:POI生成excel,自定义excel样式