原码:对一个整数进行二进制的转换,负数则在二进制的最高位为赋1。
代码:
int arr[8]; void exchange_bin(int a) { int i; while(a!=0) { arr[i] = a % 2; a = a / 2; i++; } }
反码:对原码按位取反。
代码:
void exchange_bin_inverse(int a) { int i; while (a != 0) { arr[i] = a % 2; a = a / 2; i++; } for(int j=0;j<i;j++) { if (arr[j] == 0) arr[j] = 1; else arr[j] = 0; } }
补码:在原码按位取反的基础上,在加1。(找到原码从最低位向最高位查找第一个数值为1的位置,向最高位方向的数值,每个按位取反;向最低位方向的数值,保持不变。)
代码:
void exchange_bin_complement(int a) { int i; while (a != 0) { arr[i] = a % 2; a = a / 2; i++; } if (a<0) //负数求补码 { for (i = 0; i <= 7; i++) { if (arr[i] == 1 && i<7) { int j; for (j = i + 1; j <= 7; j++) { if (arr[j] == 0) arr[j] = 1; else arr[j] = 0; } break; } } } }