1.机器数
机器数 是指一个数在计算机内部的二进制表示形式
数字化符号:用 0 表示正号(+),用 1 表示负号(-)。这个符号位通常放在二进制序列的最高位(对于定点数)。
位数固定:机器数的长度(位数)是固定的,由计算机硬件(如寄存器、ALU的位数)决定。例如,8位、16位、32位、64位。
编码规则多样:同一个真值,根据不同的编码规则(原码、反码、补码、移码),可以得到不同的机器数。
表示范围有限:由于位数固定,机器数能表示的范围是有限的,超出则发生溢出。
例子(假设用8位二进制表示整数 +11 和 -11):
真值 +11 的二进制绝对值是 1011。
原码机器数:00001011 (最高位0表示正,后面是数值) 补码机器数:00001011 (正数的原、反、补码相同)真值 -11 的二进制绝对值是 1011。
原码机器数:10001011 (最高位1表示负,后面是数值) 补码机器数:11110101 (符号位为1,数值部分取反加1) 核心:机器数是真值在计算机中的“化身”,是计算机存储和运算的实际对象。2. 真值
机器数对应的实际数值
3.定点表示法
好的,这是一个计算机组成原理中的核心基础概念。我们来系统地解释一下这三个紧密相关的概念。
1. 真值
真值是指一个数本身真实的数值,也就是我们日常生活中书写和理解的数值。
- 它包含符号(+ 或 -)和绝对值两部分。
- 表示形式:通常用 “+”、“-” 号加绝对值表示。
- 例子:
+1011(十进制 +11)-1011(十进制 -11)+0.1011(十进制 +0.6875)-0.1011(十进制 -0.6875)
核心:真值是原始的、未编码的数值。计算机无法直接存储“+”和“-”号,所以需要将真值转换为机器数。
2. 机器数
机器数是指一个数在计算机内部的二进制表示形式。
- 它是将真值的符号和数值一起进行数字化编码后的结果。
- 它有几个关键特点:
- 数字化符号:用
0表示正号(+),用1表示负号(-)。这个符号位通常放在二进制序列的最高位(对于定点数)。 - 位数固定:机器数的长度(位数)是固定的,由计算机硬件(如寄存器、ALU的位数)决定。例如,8位、16位、32位、64位。
- 编码规则多样:同一个真值,根据不同的编码规则(原码、反码、补码、移码),可以得到不同的机器数。
- 表示范围有限:由于位数固定,机器数能表示的范围是有限的,超出则发生溢出。
- 数字化符号:用
例子(假设用8位二进制表示整数+11和-11):
- 真值
+11的二进制绝对值是1011。- 原码机器数:
00001011(最高位0表示正,后面是数值) - 补码机器数:
00001011(正数的原、反、补码相同)
- 原码机器数:
- 真值
-11的二进制绝对值是1011。- 原码机器数:
10001011(最高位1表示负,后面是数值) - 补码机器数:
11110101(符号位为1,数值部分取反加1)
- 原码机器数:
核心:机器数是真值在计算机中的“化身”,是计算机存储和运算的实际对象。
3. 定点表示法
定点表示法是规定计算机中小数点位置固定不变的一种数据表示方法。它是机器数的一种具体组织方式。
定点数主要分为两类:
a) 定点整数
小数点固定在最低有效位(LSB)之后。
- 格式:
符号位+ 数值位(纯整数部分) - 表示范围(以n位补码为例):
-2^(n-1)到+(2^(n-1) - 1) - 例子:机器数
00001011(8位定点整数补码)表示真值+11。
b) 定点小数
小数点固定在符号位之后,最高数值位之前。
- 格式:
符号位+.+ 数值位(纯小数部分)。注意,这个“.”是隐含的,并不实际存储。 - 表示范围(以n位补码为例):
-1到+(1 - 2^-(n-1)) - 例子:假设机器数
10110000是一个8位定点小数(补码),其最高位1是符号位,其后是小数部分.0110000。经过换算,它表示的真值是一个负数(具体值需根据补码规则计算)。
定点表示法的特点:
- 优点:硬件实现简单,运算速度快。早期的计算机和嵌入式系统中常见。
- 缺点:
- 数值范围与精度矛盾:总位数固定的情况下,整数部分位数多,则范围大但精度低;小数部分位数多,则精度高但范围小。
- 灵活性差:难以同时表示非常大和非常小的数。为了克服这个缺点,现代通用计算机普遍采用浮点表示法(IEEE 754标准)。
核心要点对比表
| 概念 | 定义 | 关注点 | 例子(负小数) |
|---|---|---|---|
| 真值 | 数本身的真实值 | 符号、大小 | -0.6875 |
| 机器数 | 真值在计算机中的编码 | 符号数字化、位数固定、编码格式 | 10101000(假设是8位补码) |
| 定点表示法 | 小数点位置固定的表示方法 | 小数点的隐含位置(整数/小数) | 规定10101000是定点小数(符号位后即小数点) |
简单来说:真值是现实,定点表示法是规则,机器数是遵循该规则在计算机世界里的存在形态。
“小数点位置固定不变”解释
“小数点位置固定不变”并不是指计算机里真的存储了一个小数点,而是指程序员/硬件设计者在设计系统时,事先约定好一个隐含的、统一的位置,所有数据的小数点都对齐在这个位置上。
这个“约定”体现在对二进制位的解释方式上,而不是存储的位模式本身。
一个生动的比喻:价格标签
想象一个超市,所有价格标签都设计成4位数字的格式,并且管理层规定:
规则A(定点整数):所有价格都是整数,单位是“分”。小数点隐含在最后两位数字之后。
- 标签
0199表示:01.99?不对!因为规则是“小数点在后”,所以它表示0199.分,即199分 = 1.99元。 - 标签
1500表示:1500.分 =15.00元。 - 这里,小数点固定在整个数字的最右边。
- 标签
规则B(定点小数):所有价格单位是“元”。小数点隐含在第一位数字之后。
- 标签
0199表示:0.199?不对!因为规则是“小数点在第一位数后”,所以它表示0.199元,即0.199元 = 1角9分9厘。 - 标签
1500表示:1.500元 =1.5元。 - 这里,小数点固定在整个数字的最左边(符号位之后)。
- 标签
关键点:
- 标签(机器数)本身都是
0199、1500这四位数字。 - 数字没有变,但解释规则不同,它代表的真实价值(真值)就完全不同。
- 一旦超市选定了一种规则,所有标签都必须统一按这个规则解读。这个统一的解读规则就是“小数点位置固定”。
计算机中的具体例子
假设我们有一个8位的存储空间,规定使用补码表示。
案例一:定点整数(小数点固定在最低位LSB之后)
- 约定:最高位是符号位,剩余7位是整数部分。小数点隐含在第0位(最低位)的右边。
- 机器数:
1000 0011 - 如何解读?
- 符号位:
1-> 负数。 - 数值部分:因为是补码,负数需要转换。
000 0011是补码形式,求其原码。- 补码
000 0011减1 ->000 0010 - 取反 ->
111 1101,这是数值的绝对值(二进制125)。
- 补码
- 这个绝对值
125是整数,因为小数点固定在最后。所以真值是-125(十进制)。
- 符号位:
案例二:定点小数(小数点固定在符号位之后)
- 约定:最高位是符号位,它后面的7位是小数部分。小数点隐含在符号位和数值位之间。
- 机器数:
1000 0011(和上面案例一的二进制序列一模一样!) - 如何解读?
- 符号位:
1-> 负数。 - 数值部分(小数部分):补码
000 0011同样需要转换求原码。- 得到绝对值(小数部分)的二进制原码是
.111 1101。
- 得到绝对值(小数部分)的二进制原码是
- 将这个二进制小数转换为十进制小数:
.111 1101= (1/2) + (1/4) + (1/8) + (1/16) + (1/32) + (0/64) + (1/128)- = 0.5 + 0.25 + 0.125 + 0.0625 + 0.03125 + 0.0078125
- ≈0.9765625
- 所以真值 ≈
-0.9765625(十进制)。
- 符号位:
对比总结
| 项目 | 案例一:定点整数 | 案例二:定点小数 |
|---|---|---|
| 相同的机器数 | 1 0000011 | 1 0000011 |
| 隐含小数点位置 | 在最低位之后1 0000011 . | 在符号位之后1 . 0000011 |
| 位模式解释 | 符号位 +7位整数 | 符号位 +7位小数 |
| 计算出的真值 | -125 | -0.9765625 |
| 体现的“固定” | 系统中所有数都被当作符号位+整数来运算 | 系统中所有数都被当作符号位+小数来运算 |