数字

有符号数和无符号数

无符号数

无符号数只有数据位,数据范围与寄存器位数有关。

如八位寄存器,存储范围是$(00000000)_2到(11111111)_2$,也就是$(0)_{10}到(255)_{10}$。

有符号数

有符号数包含符号位和数据位

机器数与真值

真值 机器数
带符号的数 符号数字化的数
+0.1001 01001
-0.1011 11011
小数定点型 小数点规定放在符号之后
+1100 01100
-1100 11100
整数定点型 小数点规定放在数值之后

原码表示法

定义

  • 整数:

$$
[x]_原 =
\begin{cases}
0,x & 2^n > x \geq 0\\
2^n-x & 0 \ge x > -2^n
\end{cases}
$$

x为真值,n为整数的位数

$x$ $[x]_原$
+1110 0,1110
-1110 $2^4-(-1110)=1,1110$
  • 小数

$$
[x]_原 =
\begin{cases}
x & 1 > x \ge 0 \\
1-x & 0 \ge x > -1
\end{cases}
$$

x为真值

$x$ $[x]_原$
+0.1101 0.1101
-0.1101 $1-(-0.1101)=1.1101$

原码的特点

优点:简单,直观

缺点:计算机中一般只有加法器,但是如果原码相加,有可能是加法,也有可能是减法。如下表:

要求 数1 数2 实际操作 结果符号
加法 加法
加法 减法 可正可负
加法 减法 可正可负
加法 加法

为了解决这一缺点,我们可以寻找一个和这个负数等价的正数,进行加法操作。就此引出补码。

补码表示法

整数

一个负数加上“模”就是负数的补数。

一个正数和一个负数互为补数时,他们绝对值之和就是“模”。

例如模16的情况下,要将1011变为0000,可以减去1011,也可以加上0101.记作$-1011 \equiv +0101$

定义

正数的补数即为其本身

$-1011 \equiv +0101$

他俩的补数均为+0101,因此为了区分正负性,需要添加符号位。

+0101的补码就是0,0101。-1011的补码就是1,0101。

负数的补数=$2^{n+1}+负数$

eg: -1011的补码 = $2^{4+1}+(-1011)=1,0101$

总结为
$$
[x]_补 = \begin{cases}
0,x & 2^n > x \geq 0\\
2^{n+1}+x & 0 > x >= -2^n(mod 2^{n+1})
\end{cases}
$$

小数

定义

$$
[x]_补 = \begin{cases}
x & 1 > x \geq 0\\
2+x & 0 > x >= -1(mod 2)
\end{cases}
$$

其实就是整数的那个式子,n=0

快捷求法

当真值为时,补码可以用原码除符号位的每一位取反再加一(反码加一)求得。

反码表示法

快捷求法

正数的反码是其本身。

负数的反码是除符号位的每一位取反(补码减一)。

移码表示法

用补码表示很难反映出真值大小。可以用移码表示法。

定义

$$
[x]_移=2^n+x(x)
$$

x为真值,n为整数的位数。

真值 补码 移码
+1100100 0,1100100 1,1100100
-1100100 1,0011100 0,0011100

可以看出,补码和移码只差一个符号位。(1变0,0变1)

数的定点表示和浮点表示

定点表示

小数点按约定方式标出。

graph LR; 1[定点机] --> |小数点在符号位之后| 2[小数定点机]; 1 --> |小数点在数据位之后| 3[整数定点机];
定点机 小数定点机 整数定点机
原码 $-(1-2^{-n})到(1-2^{-n})$ $-(2^{n}-1)到(2^{n}-1)$
补码 $-1到(1-2^{-n})$ $-2^{n}到(2^{n}-1)$
反码 $-(1-2^{-n})到(1-2^{-n})$ $-(2^{n}-1)到(2^{n}-1)$

浮点表示

$$
N=S*r^{j} \\ 浮点数的一般形式(科学计数法)
$$

N:要表示的小数,S:尾数,j:阶码,r:尾数的基值

计算机中r取2,4,8,16等数值

计算机中S小数,可正可负

计算机中j整数,可正可负

graph LR; N0[N=11.0101]; N1[0.110101 * 2^10]; N2[1.10101 * 2^1]; N3[1101.01 * 2^-10]; N4[0.00110101 * 2^100]; N0-->|"正确 & 规格化数"|N1; N0-->|"不正确"|N2; N0-->|"不正确"|N3; N0-->|"正确"|N4;

最小负数:$-2^{(2^m-1)}*(1-2^{-n})$

最大负数:$-2^{-(2^m-1)}*2^-n$

最小正数:$2^{-(2^m-1)}*2^-n$

最大正数:$2^{(2^m-1)}*(1-2^{-n})$

最后修改:2023 年 05 月 18 日
如果觉得我的文章对你有用,请随意赞赏