正数的补码是原码;

负数的补码是反码加一。

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

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位补码

  • UC3846控制芯片工作原理控制图 逆变焊机原理与用途
  • 数字万用表电阻档测试二极管正反向没有阻值(使用万用表测量二极管的正向电阻,为什么各档)
  • 学单片机需要学数电模电吗(学单片机要先学数电模电吗)
  • 电工怎么选择适合自己用的万用表(电工初学者买什么样的万用表好)
  • 单片机需要同时运行多个任务怎么办(单片机怎么同时执行多个任务)
  • 电机保护的方案取决于负载的机械特性
  • 绝缘电阻表正负搭接不复零位是怎么回事
  • 短路怎么用万用表查