前言
了解进制间的相互转换:
- 二进制与八、十六进制间的相互转换
- 任意进制转换为十进制
- 十进制转换为任意进制数
了解如何求海明校验码及循环冗余校验CRC码
以下是本篇文章正文内容
一、进制转换
1.1 二进制转换为八进制数和十六进制数
思路:分为小数部分及整数部分,整数部分:从小数点往左分组,将一串二进制数分为3位(八进制)一组或4位(十六进制)一组在数的最左边根据需要补0。小数部分:从小数点后开始分组,适当在最右边补0
举例
1.二进制数(11111011.01110)转换为八进制数(三位一组)
2.二进制数(11111011.01110)转换为十六进制数(四位一组)
1.2 任意进制数转换为十进制数
思路:将任意进制的各位数码与他们的权值相乘并将他们相加得到十进制数。
举例:
1.二进制数(101001.01)转换为十进制数
2.八进制数(373)转换为十进制数
3.十六进制数(fb)转换为十进制数
1.3 十进制转换为任意进制
思路:1.整数部分采取除基取余,小数部分采用乘基取余。
2.拼凑法
1.举例十进制数(254.25)转换为二进制数
拼凑法:254.25 = 128 + 64 + 32 + 16 + 8 + 4 + 2 + 0.25
特殊情况(小数乘不到1无限循环,无法用二进制精准表示,例如十进制数0.3)
3.举例十进制数(254.25)转换为八进制数
2.举例十进制数(254.25)转换为十六进制数
二、校验码求取
2.1海明校验码
ps:异或((1 0 得1) 0 0 或1 1 得 0)
获取步骤
- 根据2^k >= n + k + 1 获取 k,n为有效信息位数
- 确定海明校验码的分布位置
- 分组形成校验关系
- 获得校验位值
举例带校验数据(10101011)若采用海明校验,其海明码为?
代码如下(示例):
2.2循环冗余校验CRC码
思路:在k位信息码后拼接R位校验码,在与生成多项式做模二除运算(异或运算)求得余数为校验码
步骤:
- 移位(左移R,低位补0)
- 相除(对最高几位做异或运算 ,除数右移一位,余数最高为1,商为1,对余数做异或,若商为1,对0做异或 循环至余数小于除数时 ,把余数作为校验位)
举例生成多项式为10011,带校验的数据为(10101011),求它的CRC码
总结
考研复习,参考教材王道2022计算机组成原理 笔记软件 :Notability