C中进制, 原码, 反码与补码的简单用法

时间:2023-12-17 09:08:14
/**
* 二进制 binary 如: 1010
* 八进制 octal 如: 070
* 十六进制 hexadecimal 如: 0x7f
*
* 1Byte = 8bits
* 1WORD = 2Bytes = 16bits "字"
* 2WORD = 4Bytes = 32bits = 1DWORD "双字"
*
* 原码, 反码和补码
* 二进制原码中, 第一位代表符号位, 1为负(negative), 0为正(positive)
* 正数: 原码 = 反码 = 补码
* 负数: 反码 = 原码除符号位外, 其他各位按位取反
* 补码 = 反码 + 1
* 计算机中数字是按补码进行存储的
*/
#include <stdio.h> int main() {
int a = 11;
// 输出变量a的十进制, 八进制, 十六进制结果
printf("变量a的十进制为 %d, 八进制为 %o, 十六进制为 %x\n", a, a, a); // 变量a的十进制为 11, 八进制为 13, 十六进制为 b int b = 11;
// 输出变量b的原码, 反码和补码
printf("变量b的值为 %d, 原码为 0000 1101, 反码为 0000 1101, 补码为 0000 1101\n", b); // 变量b的值为 11, 原码为 0000 1101, 反码为 0000 1101, 补码为 0000 1101 // 输出变量c的原码, 反码和补码
int c = -11;
printf("变量c的值为 %d, 原码为 1000 1101, 反码为 1111 0010, 补码为 1111 0011\n", c); // 变量c的值为 -11, 原码为 1000 1101, 反码为 1111 0010, 补码为 1111 0011 int d = -1;
// 输出变量d的原码, 反码和补码
printf("变量d的值为 %d, 原码为 1000 0000 0000 0000 0000 0000 0000 0001, 反码为 1111 1111 1111 1111 1111 1111 1111 1110, 补码为 1111 1111 1111 1111 1111 1111 1111 1111\n", d);
// 以上输出: 变量d的值为 -1, 原码为 1000 0000 0000 0000 0000 0000 0000 0001, 反码为 1111 1111 1111 1111 1111 1111 1111 1110, 补码为 1111 1111 1111 1111 1111 1111 1111 1111
// 输出变量d的无符号整数, 实际输出的是d的补码的十进制数 4294967295
printf("变量d的值为 %d, 无符号整数为 %u\n", d, d); // 变量d的值为 -1, 无符号整数为 4294967295 int e = 100;
// 输出变量e在内存中占的字节数
printf("整型变量e的值为 %d, 在内存中占 %d 个字节\n", e, sizeof(e)); // 整型变量e的值为 100, 在内存中占 4 个字节 return 0;
}