c语言中的原,反,补码

打印 上一主题 下一主题

主题 1911|帖子 1911|积分 5733

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
 目次
一、原码
二、反码
三、补码
示例1:
示例2:

在计算机范畴中,原码、反码和补码是用来表示有符号整数的三种不同的编码方式。

一、原码

        原码是最直观的一种表示方法,即用最高位表示符号位,0表示正数,1表示负数,其余位表示数值的大小。例如,十进制数+3的原码为00000011,十进制数-3的原码为10000011。
二、反码

        反码是为了办理原码运算中出现的零有两种表示方法的问题而引入的。正数的反码与原码相同,负数的反码是将原码中除符号位外的所有位取反。例如,十进制数+3的反码为00000011,十进制数-3的反码为11111100。
三、补码

        补码是为了办理原码负数相加发生溢出时无法正确表示的问题而引入的。正数的补码与原码相同,负数的补码是将原码中除符号位外的所有位取反,然后再加1。例如,十进制数+3的补码为00000011,十进制数-3的补码为11111101。
示例1:

  1. #include <stdio.h>
  2. void printBinary(int num) {
  3.     for (int i = 7; i >= 0; i--) {
  4.         printf("%d", (num >> i) & 1);
  5.     }
  6.     printf("\n");
  7. }
  8. int main() {
  9.     int num = -3;
  10.     // 原码
  11.     printf("原码表示:\n");
  12.     printBinary(num);
  13.     // 反码
  14.     int neg_num = num < 0 ? (~num) : num;
  15.     printf("反码表示:\n");
  16.     printBinary(neg_num);
  17.     // 补码
  18.     int twos_complement;
  19.     if (num < 0) {
  20.         twos_complement = (~num) + 1;
  21.     } else {
  22.         twos_complement = num;
  23.     }
  24.     printf("补码表示:\n");
  25.     printBinary(twos_complement);
  26.     return 0;
  27. }
复制代码

示例2:

  1. #include <stdio.h>
  2. void printBinary(int num) {
  3.     for (int i = 7; i >= 0; i--) {
  4.         printf("%d", (num >> i) & 1);
  5.     }
  6.     printf("\n");
  7. }
  8. int main() {
  9.     int num1 = 5; // 正数的情况
  10.     // 原码
  11.     printf("数字 %d 的原码表示:\n", num1);
  12.     printBinary(num1);
  13.     // 反码
  14.     printf("数字 %d 的反码表示:\n", num1);
  15.     printBinary(num1);
  16.     // 补码
  17.     printf("数字 %d 的补码表示:\n", num1);
  18.     printBinary(num1);
  19.     printf("\n");
  20.     int num2 = -8; // 负数的情况
  21.     // 原码
  22.     printf("数字 %d 的原码表示:\n", num2);
  23.     printBinary(num2);
  24.     // 反码
  25.     int neg_num2 = num2 < 0 ? (~num2) : num2;
  26.     printf("数字 %d 的反码表示:\n", num2);
  27.     printBinary(neg_num2);
  28.     // 补码
  29.     int twos_complement2;
  30.     if (num2 < 0) {
  31.         twos_complement2 = (~num2) + 1;
  32.     } else {
  33.         twos_complement2 = num2;
  34.     }
  35.     printf("数字 %d 的补码表示:\n", num2);
  36.     printBinary(twos_complement2);
  37.     return 0;
  38. }
复制代码
以上代码示例中,起首界说了一个函数printBinary用于将一个整数以二进制情势打印出来。然后在main函数中,将一个整数-3作为示例输入,分别输出了其原码、反码和补码表示。您可以在编译器中运行该代码,查看结果。



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

我可以不吃啊

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表