c语言中的原,反,补码
目录
一、原码
二、反码
三、补码
示例1:
示例2:
在计算机领域中,原码、反码和补码是用来表示有符号整数的三种不同的编码方式。
一、原码
原码是最直观的一种表示方法,即用最高位表示符号位,0表示正数,1表示负数,其余位表示数值的大小。例如,十进制数+3的原码为00000011,十进制数-3的原码为10000011。
二、反码
反码是为了解决原码运算中出现的零有两种表示方法的问题而引入的。正数的反码与原码相同,负数的反码是将原码中除符号位外的所有位取反。例如,十进制数+3的反码为00000011,十进制数-3的反码为11111100。
三、补码
补码是为了解决原码负数相加发生溢出时无法正确表示的问题而引入的。正数的补码与原码相同,负数的补码是将原码中除符号位外的所有位取反,然后再加1。例如,十进制数+3的补码为00000011,十进制数-3的补码为11111101。
示例1:
#include <stdio.h>void printBinary(int num) {for (int i = 7; i >= 0; i--) {printf("%d", (num >> i) & 1);}printf("\n");
}int main() {int num = -3;// 原码printf("原码表示:\n");printBinary(num);// 反码int neg_num = num < 0 ? (~num) : num;printf("反码表示:\n");printBinary(neg_num);// 补码int twos_complement;if (num < 0) {twos_complement = (~num) + 1;} else {twos_complement = num;}printf("补码表示:\n");printBinary(twos_complement);return 0;
}
示例2:
#include <stdio.h>void printBinary(int num) {for (int i = 7; i >= 0; i--) {printf("%d", (num >> i) & 1);}printf("\n");
}int main() {int num1 = 5; // 正数的情况// 原码printf("数字 %d 的原码表示:\n", num1);printBinary(num1);// 反码printf("数字 %d 的反码表示:\n", num1);printBinary(num1);// 补码printf("数字 %d 的补码表示:\n", num1);printBinary(num1);printf("\n");int num2 = -8; // 负数的情况// 原码printf("数字 %d 的原码表示:\n", num2);printBinary(num2);// 反码int neg_num2 = num2 < 0 ? (~num2) : num2;printf("数字 %d 的反码表示:\n", num2);printBinary(neg_num2);// 补码int twos_complement2;if (num2 < 0) {twos_complement2 = (~num2) + 1;} else {twos_complement2 = num2;}printf("数字 %d 的补码表示:\n", num2);printBinary(twos_complement2);return 0;
}
以上代码示例中,首先定义了一个函数printBinary
用于将一个整数以二进制形式打印出来。然后在main
函数中,将一个整数-3作为示例输入,分别输出了其原码、反码和补码表示。您可以在编译器中运行该代码,查看结果。