计算机组成 | 超详细 数的表示与编码 进制转换 原码 补码 反码

本文详细介绍了计算机中不同进制之间的转换方法,包括二进制、十进制、八进制和十六进制,以及小数表示中的定点和浮点编码。此外,还涵盖了汉字编码如GB2312、GBK和Unicode等常见字符集的标准和用途。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


本节主要是计算机中数的表示和编码部分

1 进制/编码转换

1.1 不同进制之间转换

1. 二进制转十进制

原理

整数部分和上述相同

小数部分每位乘以2的负幂次,然后求和。
例子:二进制数 110.101 转换为十进制:
整数部分: 1 × 2 2 + 1 × 2 1 = 4 + 2 = 6 1 \times 2^2 + 1 \times 2^1 = 4 + 2 = 6 1×22+1×21=4+2=6
小数部分: 1 × 2 − 1 + 0 × 2 − 2 + 1 × 2 − 3 = 0.5 + 0 + 0.125 = 0.625 1 \times 2^{-1} + 0 \times 2^{-2} + 1 \times 2^{-3} = 0.5 + 0 + 0.125 = 0.625 1×21+0×22+1×23=0.5+0+0.125=0.625

所以,二进制 110.101 等于十进制的 6.625

2. 十进制转二进制

原理

整数部分不断将十进制数除以2,记录下余数,最后的二进制数是这些余数的逆序排列

小数部分通过不断乘以2然后取整数部分来转换。

例子:十进制数 13.625 转换为二进制:
整数部分:

十进制数 13 转换为二进制:

  • 13 ÷ 2 = 6 余 1
  • 6 ÷ 2 = 3 余 0
  • 3 ÷ 2 = 1 余 1
  • 1 ÷ 2 = 0 余 1

所以,十进制 13 等于二进制的 1101

小数部分:0.625 × 2 = 1.25 → 1, 0.25 × 2 = 0.5 → 0, 0.5 × 2 = 1 → 1
所以,十进制 10.625 等于二进制的 1101.101

3. 八进制转十进制

原理:和二进制到十进制相同,但用8的幂次。
例子:八进制数 23.4 转换为十进制:
整数部分: 2 × 8 1 + 3 × 8 0 = 16 + 3 = 19 2 \times 8^1 + 3 \times 8^0 = 16 + 3 = 19 2×81+3×80=16+3=19
小数部分: 4 × 8 − 1 = 0.5 4 \times 8^{-1} = 0.5 4×81=0.5
所以,八进制 23.4 等于十进制的 19.5

4. 十进制转八进制

原理:和十进制到二进制相同

但整数部分除以8看余数

小数部分乘以8 取整数
例子:十进制数 45.625 转换为八进制:
整数部分:45 转换为 55
小数部分:0.625 × 8 = 5 → 5
所以,十进制 45.625 等于八进制的 55.5

5. 十六进制转十进制

原理:和二进制到十进制相同,但用16的幂次。
例子:十六进制数 2F.A 转换为十进制:
整数部分: 2 × 1 6 1 + 15 × 1 6 0 = 32 + 15 = 47 2 \times 16^1 + 15 \times 16^0 = 32 + 15 = 47 2×161+15×160=32+15=47
小数部分: 10 × 1 6 − 1 = 0.625 10 \times 16^{-1} = 0.625 10×161=0.625

所以,十六进制 2F.A 等于十进制的 47.625

6. 十进制转十六进制

原理:和十进制到二进制相同,但除以16和乘以16。
例子:十进制数 75.8 转换为十六进制:
整数部分:75 转换为 4B
小数部分:0.8 × 16 = 12.8 → C, 0.8 × 16 = 12.8 → C(重复)
所以,十进制 75.8 等于十六进制的 4B.C(重复)。

7 二进制转八进制

原理:整数部分从右向左每三位一组,小数部分从左向右每三位一组,不足三位的补零。注意补零的方向不一样,整数开头补0,小数部分末尾补零,例如整数部分10,则补充为010,小数部分10,则补充维100

例子:二进制数 110110.1101 转换为八进制。

  • 整数部分(从右向左分组):110 110110 110
  • 小数部分(从左向右分组):110 100110 100(末尾补零)
  • 转换每组:整数部分 110 为八进制的 61106;小数部分 11061004
  • 所以,二进制 110110.1101 等于八进制的 66.64

8 二进制转十六进制

原理:整数部分从右向左每四位一组,小数部分从左向右每四位一组,不足四位的补零。

例子:二进制数 110110.1101 转换为十六进制。

  • 整数部分(从右向左分组):0110 1100110 1100(前面补零)
  • 小数部分(从左向右分组):1101 00001101 0000(末尾补零)
  • 转换每组:整数部分 0110 为十六进制的 61100C;小数部分 1101D00000
  • 所以,二进制 110110.1101 等于十六进制的 6C.D0

1.2 不同编码之间转换

机器数编码主要有原码,反码和补码

其中

正数:原,反,补相同
负数:原,反,补不同,但最高位都为1。

每种表示法的处理方式如下:

  1. 原码:最高位设为1表示负数,其余位表示数值本身。例如,-5的原码表示(假设使用8位)为 10000101

  2. 反码:对于负数,最高位保持为1,其余位是原码的逐位取反(即1变0,0变1)。例如,-5的反码表示为 11111010。这是因为5的原码为 00000101,取反后得到 11111010

  3. 补码:负数的补码是其反码加1。补码用于简化加法和减法操作,因为它允许使用相同的加法硬件来处理正数和负数的加法。例如,-5的补码表示为 11111011。这是因为-5的反码是 11111010,加1后得到 11111011

所以着重看负数的各种转换情况

负数:

​ 原→反, 符号位不变,尾数按位求反
​ 原→补 ,符号位不变,尾数按位求反+1
​ 补→原, 符号位不变,尾数求反+1
​ 反→原 ,符号位不变,尾数求反.

2 字符编码表示

2.1 小数表示

在计算机科学中,小数的表示主要有两种形式:定点表示和浮点表示。这两种表示方法各有特点,适用于不同的应用场景。

2.1.1 定点表示

定点表示法将小数点的位置固定在某个位置。在这种表示中,小数部分和整数部分的长度是预先设定的。定点表示法通常用于那些小数点位置固定且精度要求不高的应用。

例子
假设我们使用一个8位的定点表示法,其中前4位用于整数部分,后4位用于小数部分。那么:

  • 数字 5.625 可以表示为 0101.1010。这里 0101 表示整数部分的 51010 表示小数部分的 .625(即 5/8)。

2.1.2 浮点表示

浮点表示法是一种更为复杂但灵活的表示方法,它允许小数点的位置随数值的大小而变化。

这种表示方式由三部分组成:符号位(表示正负)、指数部分(决定小数点的位置)和尾数部分(表示实际数字)。

例子
以IEEE 754标准的32位单精度浮点表示为例,一个浮点数如 5.625 可以表示为:

  • 符号位:0(因为是正数)
  • 指数部分:用于移动小数点。例如,5.625 转换为二进制是 101.101,标准化(即使其成为1.xxx形式)后为 1.01101 乘以 2^2。因此,指数部分是 2(实际存储时,指数会加上偏移量,对于32位单精度,偏移量是127,所以存储的指数值是129,或二进制 10000001)。
  • 尾数部分:去掉小数点前的 1,余下 01101。在32位单精度中,尾数部分有23位,不足的部分补0。

综上,5.625 的浮点表示(近似)为:0 10000001 01101000000000000000000

总结来说,定点表示适用于固定精度需求,而浮点表示更适合表示广泛的数值范围和不同的精度要求,尤其是在科学计算和工程领域中。浮点表示虽然灵活,但也可能引入舍入误差。

2.2 汉字编码

以下是常见的汉字字符集编码:

GB2312编码:1981年5月1日实施的简体中文汉字编码国家标准。GB2312对汉字采用双字节编码,收录7445个图形字符,其中包括6763个汉字。自2017年3月23日起,该标准转化为推荐性标准:GB/T2312-1980,不再强制执行。

BIG5编码:台湾地区繁体中文标准字符集,采用双字节编码,共收录13053个中文字,1984年实施。

GBK编码:1995年12月发布的汉字编码国家标准,是对GB2312编码的扩充,对汉字采用双字节编码。GBK字符集共收录21003个汉字,包含国家标准GB13000-1中的全部中日韩汉字,和BIG5编码中的所有汉字。

Unicode编码:国际标准字符集,它将世界各种语言的每个字符定义一个唯一的编码,以满足跨语言、跨平台的文本信息转换。Unicode采用四个字节为每个字符编码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值