进制转换
n进制->十进制
步骤说明:
-
识别基数:首先确认你正在处理的是n进制数,这里的n就是该数的基数。
-
数位权重:从右向左数,每个位置上的数字都有一个权重,最右边的位置权重为0,依次向左递增。
-
计算值:将每个位置上的数字乘以基数的相应幂次方,然后将所有的结果相加起来。
假设有一个n进制数 dn dn-1 ... d2 d1 d0
,其中每个di
代表该位置上的数字(范围通常是0到n-1),那么该数转换为十进制的结果为:
十进制数=d0×n^0+d1×n^1+d2×n^2+⋯+dn×n^n
示例:
假设我们要将一个十六进制(基数为16)的数1A3
转换成十进制:
- 从右往左,第一位(个位)是
3
,权重为0
,因此其值为3×16^0=3 - 第二位(十位)是
A
(十六进制中的A
等于十进制中的10
),权重为1
,因此其值为10×16^1=160 - 第三位(百位)是
1
,权重为2
,因此其值为1×162=256
将这些值相加,得到:
3+160+256=419
十进制转n进制
步骤说明:
-
初始化:准备一个空列表用于存储转换过程中产生的余数。
-
不断除以n:将十进制数除以n,记录下余数,并将结果(即商)作为新的被除数继续除以n。
-
重复步骤2:一直重复此过程,直到被除数变为0。
-
收集余数:每次除法后得到的余数都存入列表中。
-
倒序输出:最后将列表中的余数倒序输出,就得到了n进制的表示形式。
示例:
假设我们要将一个十进制数419
转换成十六进制(基数为16):
- 419÷16=26 余 3 -> 记录余数
3
- 26÷16=1余 10 -> 记录余数
10
(十六进制中表示为A
) - 1÷16=0 余 1 -> 记录余数
1
此时,商为0,停止运算。收集所有余数并逆序排列得到1A3
。
因此,十进制数419
转换为十六进制后的结果是1A3
。
真值与机器数
真值:符合人类习惯的数字
例子:15 -> 1111
8 -> 1000
机器数:正负号要被数字化
例子:+15 -> 0 1111
-8 -> 1 1000
原码:数值部分表示真值的绝对值,符号位 0/1 -> 正/负
反码:若符号位为0,则反码=原码;若为1,则全部位取反
补码:正数的补码=原码,负数的补码=反码末位+1(要考虑进位)
移码:在补码的基础上将符号位取反(只能表示整数)
例子:
x=+19D时
[x]原=0,0010011
[x]反=0,0010011
[x]补=0,0010011
[x]移=1,0010011
x=-19D时
[x]原=1,0010011
[x]反=1,1101100
[x]补=1,1101101
[x]移=0,1101101
真值0
[+0]原=00000000
[+0]反=00000000
[-0]原=10000000
[-0]反=11111111
[+0]补=[-0]补=00000000
[+0]移=[-0]移=10000000
定点数and浮点数
定点数 (Fixed-point number)
定点数是一种用来表示实数的数据类型,其中小数点的位置是固定的。在计算机内存中,它通常被存储为整数,而小数点的位置由编程者或硬件设计者事先确定。
优点:
- 简单且计算速度快,因为它们可以使用标准的整数运算。
- 在嵌入式系统和实时应用中非常有用,特别是在资源受限的环境中。
缺点:
- 小数点位置固定限制了其表示范围和精度。
浮点数 (Floating-point number)
浮点数是一种能够表示更大范围数值的数据类型,包括非常大或非常小的数值。它通过使用一个可变的小数点位置来实现这一点,该位置由一个指数(Exponent)来控制。浮点数在计算机内存中的存储通常遵循IEEE 754标准,其中包括一个符号位、一个指数部分和一个尾数(Mantissa或Fraction)部分。
优点:
- 能够表示非常大的数以及非常接近零的小数。
- 灵活性高,适用于广泛的数学和科学计算。
缺点:
- 计算速度相对较慢,因为需要额外的硬件支持来进行浮点运算。
- 存在精度损失的问题,尤其是在进行一系列运算之后累积误差可能变得显著。
校验码
确保数据在传送过程中正确无误:
(1)提高硬件电路可靠性
(2)提高代码的校验能力
校验码:用来检测传送数据是否出错
码距:指一个编码系统中任意两个合法编码之间至少有多少个二进制位不同
奇偶校验
循环冗余校验
海明码
方法:在数据位之间插入k个校验码,通过扩大码距来实现检错和纠错
设数据位n位,校验码k位,需满足:2^k-1>=n+k
位运算
与运算(AND)
与运算符通常用 &
表示。对于两个比特(0 或 1),与运算的结果如下:
A | B | A & B |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
规则:当且仅当两个比特都为1时,结果才为1。否则,结果为0。
或运算(OR)
或运算符通常用 |
表示。对于两个比特,或运算的结果如下:
A | B | A | B |
---|---|---|---|
0 | 0 | 0 | |
0 | 1 | 1 | |
1 | 0 | 1 | |
1 | 1 | 1 |
规则:只要有一个比特为1,结果就为1。只有当两个比特都为0时,结果才为0。
异或运算(XOR)
异或运算符通常用 ^
表示。对于两个比特,异或运算的结果如下:
A | B | A ^ B |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
规则:当两个比特不同时,结果为1;当两个比特相同时,结果为0。
练习题: