Skip to content

1. 进制系统

1.1 进制表示

进制基数前缀示例
二进制20b0b101
八进制80061
十进制10123
十六进制160x0x45
  • 进制转换
    • 十进制 → 二进制
      • 整数:除2取余,逆序排列。
      • 小数:乘2取整,顺序排列。
      plaintext
      例:13.6 → 1101.1001...
        整数部分:13 ÷ 2 = 余1 → 1101(逆序)
        小数部分:0.6 × 2 = 取整1 → 0.1001(顺序)
    • 二进制 → 十进制
      • 公式:每位值 × 2位置索引(索引从0开始)
      plaintext
      例:1100.001 → 12.125
        整数:1×2³ + 1×2² + 0×2¹ + 0×2⁰ = 12
        小数:0×2⁻¹ + 0×2⁻² + 1×2⁻³ = 0.125

1.2 存储单位

单位换算关系
位 (bit)最小单位(0/1)
字节 (B)1 B = 8 bit
千字节 (KB)1 KB = 1024 B
兆字节 (MB)1 MB = 1024 KB

1.3 原码/反码/补码

  • 正数:三码相同(12 → 0000...1100)。
  • 负数(以 -12 为例):
    plaintext
    原码:1000...1100(符号位1,其余为绝对值)
    反码:1111...0011(符号位不变,其余取反)
    补码:1111...0100(反码 + 1)→ 计算机存储格式
  • 补码意义:统一加减法运算(减法转为加法):
    plaintext
    1 - 1 = 1 + (-1) 
      → 0000...0001(1补码) 
      + 1111...1111(-1补码) 
      = 0000...0000(结果0)

1.4 有符号与无符号数

  • 区别:最高位是否作为符号位。
    cpp
    unsigned int a = 0b1000...0010;  // 无符号(正数)
    int b = 0b1000...0010;           // 有符号(负数补码)
  • 输出差异
    cpp
    printf("%u", a);  // 输出无符号值
    printf("%d", b);  // 输出有符号值(可能为负数)

附:C++关键字表(部分)

关键字关键字关键字
intfloatreturn
constnamespacestatic_cast
boolusingdynamic_cast

知识如风,常伴吾身