首页 > 代码库 > 整型数补码原码

整型数补码原码

#define MAX 32 void IntToBinary(char binary[], int x);  // x转换为二进制 void IntToBinary2(char binary[], int x); // 不同的思路可以有多种方法 void TrueForm(char binary[], int x);    // 获得x的原码 void RadixMinus(char binary[], int x);  // 获得x的反码 void Complement(char binary[], int x);  // 获得x的补码 void main() {     char binary[MAX+1] = {0};     int number;     printf("输入要测试的整型:");     scanf("%d",&number);     IntToBinary2(binary,number);     printf("%d 的二进制表示: %s\n",number,binary);     TrueForm(binary,number);     printf("%d 的原码: %s\n",number,binary); } void IntToBinary(char binary[], int x) // 由高位到低位转换 {     for(unsigned int i = 0x80000000, j = 0; i > 0; i >>= 1)     {         binary[j++] = x & i ? 1:0;     } } void IntToBinary2(char binary[], int x) // 由低位到高位转换 {     for(int j = MAX-1; j >= 0; --j)     {         binary[j] = (x & 1) + 0;         x >>= 1;     } } void TrueForm(char binary[], int x) // 对于负数,计算机存储的是补码 {     if(x >= 0)     {         IntToBinary(binary,x);     }else     {         IntToBinary(binary,(1<<(MAX-1))-x); // 由原码数学公式得 | 1<<n <=> 2^n     } } void RadixMinus(char binary[], int x) {     if(x >= 0)     {         IntToBinary(binary,x);     }else     {         IntToBinary(binary,x-1);  // 计算机存储的是补码,负数的反码等于补码减一     } } void Complement(char binary[], int x) {     IntToBinary(binary,x); }

上面的程序IntToBinary就是把内存结构用字符串表示出来。这样可以看出整数负数都是用补码表示的。

int一般在内存中按补码存储,整数补码和原码相同,负数原码=2(n-1次方)-补码

整型数补码原码