#include <stdio.h>
#define N 8 //這里你要求是8位
int main(int argc, const char * argv[]) {
int binary[8];//用於存放最后取得的補碼
int a=0;//要處理的數值
int a1=0;//保存a的值
int m=0;//用於存放臨時的數值
printf("請輸入要轉換成二進制補碼的數的值:\n");
scanf("%d",&a);
a1=a;
if (a==0) {
for (int i=0; i<N; i++) {
binary[i]=0;
}
}else if (a<0){//負數部分開始
binary[0]=1;
a=-a;
//求原碼部分開始
for (int i=N-1; i>0; i--) {
binary[i]=a%2;
a=a/2;
if (a<1) {
m=i;
break;
}
}//求源碼部分結束
printf("%d的原碼值為: ",a1);
for (int i=0; i<N; i++) {
printf("%d",binary[i]);
}
printf("\n");
for (int i=m; i<N; i++) {//負數取反部分,第一位符號位不變。
if (binary[i]==0) {
binary[i]=1;
}
else binary[i]=0;
}
binary[N-1]=binary[N-1]+1;
for (int i=N-1; i>0; i--) {
if (binary[i]>1) {
binary[i]=0;
binary[i-1]=binary[i-1]+1;
if (binary[i-1]<2) {
break;
}
}
}
//負數部分結束
}else{
binary[0]=0;
for (int i=N-1; i>0; i--) {
binary[i]=a%2;
a=a/2;
if (a<1) {
m=i;
break;
}
}
for (int i=1; i<m; i++) {
binary[i]=0;
}
printf("%d的原碼值為: ",a1);
for (int i=0; i<N; i++) {
printf("%d",binary[i]);
}
printf("\n");
}
printf("%d的補碼值為: ",a1);
for (int i=0; i<N; i++) {
printf("%d",binary[i]);
}
printf("\n");
return 0;
}
運行結果截圖: