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

/**
 * 二进制 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;
}
posted @ 2019-10-30 16:31  勾践  阅读(230)  评论(0编辑  收藏  举报