题目描述:
在计算机系统中,数值一律用补码来表示和存储。
求负整数的补码是将该数对应的正数转换为二进制数(不足 8 位时高位补 0),最高位作为符号位为 1,其余每位二进制数取反( 1 变成 0,0 变成 1),末位加 1,即反码的基础上再加1。
正整数的原码、反码、补码都一样。
编写一个程序,输入十进制数x,输出对应的反码和补码。
输入格式:
一个整数x ( -127 <= x <= 127) 。
输出格式:
输出共两行。
第一行表示该数的反码,8位的01串。
第二行表示该数的补码,8位的01串。
样例输入:
-5
样例输出:
11111010 11111011
时间限制: 1000ms
空间限制: 256MB
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,a[8]={1},flag=0;
cin>>n;
if(n>=0){
flag=1;
}
n=abs(n);
for(int i=7;i>0;i--){
if(n%2==1){
a[i]=0;
}else{
a[i]=1;
}
n=n/2;
}
if(flag==1){
cout<<0;
for(int i=1;i<8;i++){
if(a[i]==1){
cout<<0;
}else{
cout<<1;
}
}cout<<endl;
cout<<0;
for(int i=1;i<8;i++){
if(a[i]==1){
cout<<0;
}else{
cout<<1;
}
}
}else{
for(int i=0;i<8;i++){
cout<<a[i];
}cout<<endl;
a[7]++;
for(int i=7;i>=0;i--){
if(a[i]>=2){
a[i]=0;
a[i-1]++;
}
}
for(int i=0;i<8;i++){
cout<<a[i];
}
}
return 0;
}