模拟一下补码求解过程
2026-03-31 17:59:03
发布于:北京
1阅读
0回复
0点赞
原码:首位表示符号,0正1负;其余数值位,真值绝对值的二进制形式。
先用 十进制转二进制的方法 求出n的32位原码
补码:正数的补码同原码;负数的补码,除符号位之外,其余位按位取反再加1。
#include<bits/stdc++.h>
using namespace std;
int main() {
int n, arr[32]={}, idx=0, f=0;
cin>>n;
if(n<0){
f=1;
n=-n;
}
//求原码
while(n){
arr[idx++]=n%2;
n/=2;
}
arr[31]=f; //符号位
if(f==1){
//按位取反
for(int i=0; i<31; i++){
if(arr[i]==0) arr[i]=1;
else arr[i]=0;
}
//再加1
arr[0]+=1;
for(int i=0; i<31; i++){
if(arr[i]>1 && i<30){
arr[i+1]+=1;
}
arr[i]%=2;
}
}
for(int i=31; i>=0; i--){
cout<<arr[i];
}
return 0;
}
这里空空如也

有帮助,赞一个