计算机微机原理与接口技术 - 1.2 ASCII码 有符号编码 原码 反码 补码

ASCII码

计算机常用的输入、输出设备(键盘、显示器、打印机) 处理的数都是字符
美国标准交换码 (ASCII)对字符进行使用七位二进制编码来表示一个字符
该编码方案中共有128个字符 (2^7 = 128)。

计算机一般存储八位数二进制码 所以 ASCII码也会被写做八位二进制码。

十进制数的二进制编码 – BCD码

BCD码使用四位二进制数 表示一个十进制数。
紧凑型BCD码
37(D) = 0011 0111B
非紧凑型BCD码
37(D) = 0000 0011B | 0000 0111B

有符号编码

计算机只能识别0和1组成的数或代码,所以有符号数的符号也只能用0和1来表示

真值和机器数的概念

真值:一个数的数值,用 **+**表示正数用 **-**来表示负数。
机器数:最常用的方法是把二进制数的最高位,定义为符号位 正为0 负为1,机器数比真值数多一个符号位

字长

计算机在同一时间内处理二进制数的位数。
对有符号数来讲,是包括符号位在内的一个二进制有符号数占的位数。
由于机器数的数值的表示方式不同,有符号数科有三种表示方法:原码、反码、补码。
数X,原码记作【x】原,反码记作【x】反,补码记作【x】补

有符号编码 - 原码

最高位数为符号位, 数值部分就是该数真值的绝对值
例如 8位原码机器数
+23(17H)的原码机器数: 0001 0111
-23(-17H)的原码机器数: 1001 0111
其中最高位为符号位,后7位是数值位

有符号数编码 - 反码

把最高位规定为符号位,数值部分对正数是其绝对值,
对于负数则是其绝对值按位取反 (即1变0,0变1)
数字0的反码有俩种表示
+0 = 0000 0000 全0
-0 = 1111 1111 全1

有符号数的编码 - 补码

对于正数的补码同原码、反码。
负数的数值位部分,按其绝对值按位取反后末位加1所得。
没有负0的补码。
由于补码表示的机器数更加适合运算,为此,计算机系统中的负数一律用补码表示。

机器数能表示真值数值范围

则n为原码数,其真值范围为:-(2^(n-1) -1)~+(2^(n-1)-1);
例如 4位数原码 是 -7 ~ +7
因真指数位数为3 则其最大表示数为 2 ^ 3 - 1 最小表示数取反
为什么是位数需减1,因为位数需减去一位符号位
为什么是 2的位数减去1的乘方
计算机微机原理与接口技术 - 1.2 ASCII码 有符号编码 原码 反码 补码_第1张图片
n为位数-1 即
2 ^ 2 + 2 ^ 1 + 2 ^ 0 = 7
2 ^ 3 - 1 = 上面的公式

反码数值范围

则n位反码数,其真值范围为:-(2(n-1)-1)~(2(n-1)-1)
其与原码计算相同,但负数二进制码不同

补码数数值范围

则n位补码数其,其真值范围为:(2(n-1)~(2(n-1)-1);
与原码,反码不同的是其 负数因需末尾加一 所以比正数多代表真值1

无符号数数值范围

0~ +2^n - 1

最后来一道转换真值的题

设x = -120 (D) 则【x】补码 = (?)16
先求出 |-120| = 120 先求绝对值
120 / 2 = 60 … 0
60 / 2 = 30 … 0
30 / 2 = 15 … 0
15 / 2 = 7 … 1
7 / 2 = 3 … 1
3 / 2 = 1 … 1
1 / 2 = 0 … 1
则倒序余数则 1111000 不足位数 高位补0
则其二进制真值绝对值为 0111 1000
其符号位为1,则原码二进制为 1111 1000
其反码 取真值部分 0111 1000 按位取反
则 1000 0111
则 补码转反码 末位加一 则等于 1000 1000
则 1000 1000 为 88(H)
答 -120(D) = 88(H)

最后只有程序员才可以定义一个数的实际意义

你可能感兴趣的:(微型计算机原理和接口技术,计算机基础,c语言,开发语言,后端)