345 字
2 分钟
CSAPP_整数的表示

整数的k进制表示与存储#

N=±[ankn+an1kn1++a1k1+a0k0]其中a1an 是0~k-1中的一个数码N=\pm [a_n\cdot k^n+a_{n-1}\cdot k^{n-1}+\dotsc+a_1\cdot k^1+a_0\cdot k^0]\\ \text{其中$a_1\dotsc a_n$ 是0~k-1中的一个数码}

例如十进制数 365:

365=3×102+6×101+5×100365=3×10^2 + 6×10^1 + 5×10^0

二进制数 1011:

10112=1×23+0×22+1×21+1×20=8+0+2+1=11101011_2=1×2^3 + 0×2^2 + 1×2^1 + 1×2^0=8+0+2+1=11_{10}
TIP

常常在数的右下角加上角标注明k进制

十进制整数转k进制数#

方法:除基取余倒序排

例如,将十进制数 45 转换为二进制:

  1. 45 ÷ 2 = 22 余 1
  2. 22 ÷ 2 = 11 余 0
  3. 11 ÷ 2 = 5 余 1
  4. 5 ÷ 2 = 2 余 1
  5. 2 ÷ 2 = 1 余 0
  6. 1 ÷ 2 = 0 余 1

将余数倒序排列得到:101101,因此 45 的二进制表示为 101101。

补码表示法#

计算机中整数通常使用补码表示法来表示和存储整数。 补码表示法的优点在于它简化了加减运算,使得加法器可以同时处理正数和负数。

补码的定义#

对于一个 n 位二进制数:

  • 正数的补码就是它本身。
  • 负数的补码是对其绝对值的二进制表示取反后加1。

例如,对于 8 位二进制数:

  • +5 的补码是 00000101
  • -5 的补码是 11111011

补码的范围#

对于一个 n 位二进制数,补码的范围是:

  • 正数范围:[0,2n11][0, 2^{n-1}-1]
  • 负数范围:[2n1,1][-2^{n-1}, -1]

例如,对于 8 位二进制数:

  • 正数范围:[0,127][0, 127]
  • 负数范围:[128,1][-128, -1]
CSAPP_整数的表示
https://biscuit0613.github.io/posts/csapp/csapp_int/
作者
Biscuit
发布于
2025-11-04
许可协议
CC BY-NC-SA 4.0