正数的补码是原码;

负数的补码是反码加一。

因此,问题就简单了,如下图所示:

C语言中如何求数值10,-10的8位补码

补码的存在是为了方便CPU进行计算的,当前几乎所有主流的CPU中都是通过累加器和移位寄存器等进行运算的,不会特别设计硬件电路来进行减法运算,通过补码,就可以将减法统一到加法中。

C语言中如何求数值10,-10的8位补码

当然,对于用户而言,求原码、补码都是CPU自己完成的,不需要用户自己转换。了解补码会更好的帮助你了解CPU的计算原理。

贴一下源代码和运行截图。

#include

#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

binary=0;

}

}else if (a

binary[0]=1;

a=-a;

//求原码部分开始

for (int i=N-1; i>0; i--) {

binary=a%2;

a=a/2;

if (a

m=i;

break;

}

}//求源码部分结束

printf(%d的原码值为: ,a1);

for (int i=0; i

printf(%d,binary);

}

printf(\n);

for (int i=m; i

if (binary==0) {

binary=1;

}

else binary=0;

}

binary[N-1]=binary[N-1]+1;

for (int i=N-1; i>0; i--) {

if (binary>1) {

binary=0;

binary[i-1]=binary[i-1]+1;

if (binary[i-1]

break;

}

}

}

//负数部分结束

}else{

binary[0]=0;

for (int i=N-1; i>0; i--) {

binary=a%2;

a=a/2;

if (a

m=i;

break;

}

}

for (int i=1; i

binary=0;

}

printf(%d的原码值为: ,a1);

for (int i=0; i

printf(%d,binary);

}

printf(\n);

}

printf(%d的补码值为: ,a1);

for (int i=0; i

printf(%d,binary);

}

printf(\n);

return 0;

}

C语言中如何求数值10,-10的8位补码

C语言中如何求数值10,-10的8位补码