【计算机组成原理】二、数据的表示和运算:1.数值与编码(十进制二进制转换、BCD码、ASCII码、汉字编码、奇偶校验码、循环冗余检测CRC、海明码)

二、数据的表示和运算

文章目录

  • 二、数据的表示和运算
    • 1.数值与编码
      • 1.1数据存储和排列
      • ❗1.2十进制转换
        • 1.2.1整数
        • 1.2.2小数
      • 1.3二进制转换
        • 1.3.1 B->O
        • 1.3.2 B->H
      • 1.4真值&机器数
      • 1.5 BCD码
      • 1.6 ASCII码
      • 1.7汉字与GBK
      • 1.8 UTF
      • 1.9检错码
        • 1.9.1奇偶校验码
        • 1.9.2循环冗余检测CRC
        • 1.9.3海明(汉明)码

二进制 Bin
十进制 Dec
八进制 Oct
十六进制 Hex(C语言中用 0x表示)

1.数值与编码

1.1数据存储和排列

在计算机系统内部,所有的信息都是用二进制进行编码的,这样做的原因有:

  1. 二进制只有两种状态,使用有两个稳定状态的物理器件就可以表示二进制数的每一位,制造成本较低。
  2. 二进制位1和0正好与逻辑值真和假对应,为计算机实现逻辑运算和程序中的逻辑判断提供了便利条件。
  3. 二进制的编码和运算规则都很简单,通过逻辑门电路能方便地实现算术运算。

字符串存储时有大、小端之分。

在这里插入图片描述

边界对齐
在这里插入图片描述

  • 进位计数法

在进位计数法中,每个数位所用到的不同数码的个数称为基数,如10进制的基数为10。每个数码所表示的数值等于该数码本身乘以一个与它所在数位有关的常数,这个常数称为位权。一个进位数的数值大小就是它的各位数码按权相加。

  • 码的权值:

有权码:例如BCD8421码、BCD2421码,每一位都有固定的权值
无权码:例如余三码,每一位的权值并不确定

eg.二进制的基数是2,计数符号是10,位权是2^n

下面为十进制和二进制之间相互转换的简易方法:

❗1.2十进制转换

十进制转换中整数部分和小数部分分开进行转换。

1.2.1整数
  • 下图演示了将十进制数字 36926 转换成八进制的过程:

在这里插入图片描述

从图中得知,十进制数字 36926 转换成八进制的结果为 110076。

  • 下图演示了将十进制数字 42 转换成二进制的过程:

在这里插入图片描述

从图中得知,十进制数字 42 转换成二进制的结果为 101010。

1.2.2小数
  • 下图演示了将十进制小数 0.930908203125 转换成八进制小数的过程:

在这里插入图片描述

从图中得知,十进制小数 0.930908203125 转换成八进制小数的结果为 0.7345。

  • 下图演示了将十进制小数 0.6875 转换成二进制小数的过程:

在这里插入图片描述

从图中得知,十进制小数 0.6875 转换成二进制小数的结果为 0.1011。

1.3二进制转换

1.3.1 B->O

二进制整数转换为八进制整数时,每三位二进制数字转换为一位八进制数字,运算的顺序是从低位向高位依次进行,高位不足三位用零补齐。下图演示了如何将二进制整数 1110111100 转换为八进制:

在这里插入图片描述

1.3.2 B->H

二进制整数转换为十六进制整数时,每四位二进制数字转换为一位十六进制数字,运算的顺序是从低位向高位依次进行,高位不足四位用零补齐。下图演示了如何将二进制整数 10 1101 0101 1100 转换为十六进制:

在这里插入图片描述

1.4真值&机器数

+15,-8这种带+或-符号的数称为真值,真值是机器数所代表的实际值。

在计算机中,通常采用数的符号与数值一起编码的方法来表示数据,常用的有原码、补码、反码表示法。这几种表示法都将数据的符号数字化,通常用0表示正,用1表示负

如0,101(逗号“,”并不实际存在,只是用来区分符号位与数值位,约定整数的数值位与符号位之间用逗号隔开,小数的符号位与数值位之间用小数点隔开)表示+5。这种把符号数字化的数称为机器数。

1.5 BCD码

binary-coded decimal,用二进制编码的十进制

  • 8421

用4bit表示1个十进制09(00001001)

冗余6位,比如5+8=13(1101)这种超出9(1001)的数,再加6(0110)进行修正,得到0001 0011表示13

  • 2421

0~4的第一位都是0
5~9的第一位都是1

原因:5(0101)(1011)两种都可表示,会出现歧义,所以只使用后者

  • 余三码

是一种无权码。在8421码的基础上加上3,即0(0011),1(0100)

1.6 ASCII码

ASCII(American Standard Code for Information Interchange,美国信息互换标准代码)是一套基于拉丁字母的字符编码,共收录了 128 个字符,用一个字节就可以存储,它等同于国际标准 ISO/IEC 646。

2^7=128。用7bit就可以表示完全,不过1B(字节)=8bit,所以还要在高位补0。最早是7位,后来扩充为8位,在7位时期,为满足被8整除条件,需加1位空位才能使用

0~9的ASCII码值为48(011 0000)~57(011 1001),即去掉高3位,只保留低4位,正好是二进制形式的0~9。

a-z(97-122)A-Z(65-90)

a-A = 32,而32是空格。

其中0-31和127是控制字符,其他的才是可显示字符

二进制十进制十六进制字符/缩写解释
00000000000NUL (NULL)空字符
00000001101SOH (Start Of Headling)标题开始
00000010202STX (Start Of Text)正文开始
00000011303ETX (End Of Text)正文结束
00000100404EOT (End Of Transmission)传输结束
00000101505ENQ (Enquiry)请求
00000110606ACK (Acknowledge)回应/响应/收到通知
00000111707BEL (Bell)响铃
00001000808BS (Backspace)退格
00001001909HT (Horizontal Tab)水平制表符
00001010100ALF/NL(Line Feed/New Line)换行键
00001011110BVT (Vertical Tab)垂直制表符
00001100120CFF/NP (Form Feed/New Page)换页键
00001101130DCR (Carriage Return)回车键
00001110140ESO (Shift Out)不用切换
00001111150FSI (Shift In)启用切换
000100001610DLE (Data Link Escape)数据链路转义
000100011711DC1/XON (Device Control 1/Transmission On)设备控制1/传输开始
000100101812DC2 (Device Control 2)设备控制2
000100111913DC3/XOFF (Device Control 3/Transmission Off)设备控制3/传输中断
000101002014DC4 (Device Control 4)设备控制4
000101012115NAK (Negative Acknowledge)无响应/非正常响应/拒绝接收
000101102216SYN (Synchronous Idle)同步空闲
000101112317ETB (End of Transmission Block)传输块结束/块传输终止
000110002418CAN (Cancel)取消
000110012519EM (End of Medium)已到介质末端/介质存储已满/介质中断
00011010261ASUB (Substitute)替补/替换
00011011271BESC (Escape)逃离/取消
00011100281CFS (File Separator)文件分割符
00011101291DGS (Group Separator)组分隔符/分组符
00011110301ERS (Record Separator)记录分离符
00011111311FUS (Unit Separator)单元分隔符
001000003220(Space)空格
001000013321!
001000103422"
001000113523#
001001003624$
001001013725%
001001103826&
001001113927
001010004028(
001010014129)
00101010422A*
00101011432B+
00101100442C,
00101101452D-
00101110462E.
00101111472F/
0011000048300
0011000149311
0011001050322
0011001151333
0011010052344
0011010153355
0011011054366
0011011155377
0011100056388
0011100157399
00111010583A:
00111011593B;
00111100603C<
00111101613D=
00111110623E>
00111111633F?
010000006440@
010000016541A
010000106642B
010000116743C
010001006844D
010001016945E
010001107046F
010001117147G
010010007248H
010010017349I
01001010744AJ
01001011754BK
01001100764CL
01001101774DM
01001110784EN
01001111794FO
010100008050P
010100018151Q
010100108252R
010100118353S
010101008454T
010101018555U
010101108656V
010101118757W
010110008858X
010110018959Y
01011010905AZ
01011011915B[
01011100925C\
01011101935D]
01011110945E^
01011111955F_
011000009660`
011000019761a
011000109862b
011000119963c
0110010010064d
0110010110165e
0110011010266f
0110011110367g
0110100010468h
0110100110569i
011010101066Aj
011010111076Bk
011011001086Cl
011011011096Dm
011011101106En
011011111116Fo
0111000011270p
0111000111371q
0111001011472r
0111001111573s
0111010011674t
0111010111775u
0111011011876v
0111011111977w
0111100012078x
0111100112179y
011110101227Az
011110111237B{
011111001247C|
011111011257D}
011111101267E~
011111111277FDEL (Delete)删除

1.7汉字与GBK

汉字的表示和编码

汉字的编码包括汉字的输入编码、汉字内码、汉字字形码三种,它们是计算机中用于输入、内部处理和输出三种用途的编码。区位码用2字节(Byte)表示一个汉字,每字节用七位码。区位码是4位十进制数,前2位是区码,后2位是位码,所以称为区位码。

如汉字“学”的区位码为4907(十进制),用2个字节的二进制可以表示为00110001 00000111。

国标码将10进制的区位码转换为16进制数后,再在每字节上加上20H。国标码两字节的最高位都是0,ASCII码的最高位也为0。为了便于区分中文和英文字符,将国标码两字节的最高位都改为1,这就是汉字内码

区位码和国标码都是输入码,它们与汉字内码的关系(16进制)为:

国标码=(区位码)16+2020H  汉字内码=(国标码)16+8080H

最早制定的汉字编码是GB2312,包括6763个汉字和682个其它符号 95年重新修订了编码,命名GBK1.0,共收录了21886个符号。 之后又推出了GBK18030编码,共收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字,现在windows平台必需要支持GBK18030编码。

区内码->国标码->汉字机内码

1.8 UTF

(也就是unicode编码):俗称万国码,致力于使用统一的编码准则表达各国的文字。 为表达更多的文字,utf-8采用2/3混编的方式。目前容纳的汉字范围小于gbk编码。并且以 3字节的方式处理中文,带来了兼容性的问题。

1.9检错码

校验码是指能够发现或能自动纠正错误的数据编码,也称检错纠错编码。校验码的原理是通过增加一些冗余码,来检验或纠错编码。

通常某种编码都由许多码字构成,任意两个合法码字之间最少变化的二进制位数(在一种编码系统中,任意两组合法代码之间的最少二进制位数的差异),称为数据校验码的码距(或称编码的最小距离)(如1100和1101之间的码距为1,因为只有最低位翻转了。而1001和0010之间的码距为3,因为只有1位没有变化)。对于码距不小于2的数据校验码,开始具有检错的能力。码距越大,检错、纠错的能力越强,而且检错能力总是大于等于纠错能力。

  • 检错编码:只是发现有错误,不能纠错,只能重传。
    • 奇偶校验码
    • 循环冗余码CRC
  • 纠错编码 海明码:不仅能发现错误,还能知道是哪一个地方发生错误。
1.9.1奇偶校验码

前面加校验元1/0

要发送的信息 D 有 d 个比特。

偶校验方案中,发送方只需包含一个附加的比特,选择附加比特的值,使得这 d+1 个比特(初始信息加上一个校验比特)中 1 的总数是偶数

在这里插入图片描述

接收方的操作也很简单。接收方只需要数一数接收的 d+1 比特中 1 的个数。
如果发现了奇数个值为 1 的比特,接收方知道了至少出现了一个比特差错。更确切的说法是,出现了奇数个差错比特。但是如果出现了偶数个比特差错,显然这种方法无法检测这种错误。

eg: 如果1001101有4个1,所以在前面加0,保持偶数个1:0,1001101

如果1001100有3个1,所以在前面加1,变成1,1001101

奇校验

1001101有4个,所以在前面加1,变成奇数个1:1,1001101

二维单比特奇偶校验方案中,D 中的 d 个比特被划分为 i 行 j 列。对每行和每列计算奇偶值。产生的 i+j+1 奇偶比特构成了链路层帧的差错检测比特。这种方法可以检测和纠正 1 比特的错误。

用一位奇偶校验能检测出一位主存错误的百分比为()
  A.0   B.1   C.0.5   D.无法计算

答案:B;
若出现一位主存错误,一定能检测出

1.9.2循环冗余检测CRC

在数据发送之前,按照某种关系附加上一定的冗余码,构成一个符合某一个规则的码字之后再发送。当发送的数据发生变化时,冗余码也发生变化,使其不再遵守规则。接收端通过检验是否符合规则判断是否出错。

CRC 编码也称为多项式编码,因为该编码将要发送的比特串看作是系数为 0 和 1 的一个 多项式,对比特串的操作被解释为多项式运算。

发送端:

要传的数据生成多项式冗余码/帧检验序列FCS
5%2= 2 …1

5%2=2…1

最终发送的数据是,要发送的数据+真检测序列FCS。这里就是5+1=6

接收端:

6%2=3…0(余数是0,判定无错,就接受)

计算冗余码FCS步骤

  1. 在要传的数据后加0。
  2. 模2除法。
  3. 最终发送的数据:要发送的数据+FCS。

在这里插入图片描述

如果余数为0,判定这个帧没有差错。(接受)

如果余数不为0,判定这个帧有差错。(丢弃)

FCS的生成以及接收端CRC检验都是由硬件实现的,处理很迅速,不会产生延迟数据。

只使用CRC:凡是接收端数据链路层接受的帧均无差错。能够实现无比特差错的传输,但不是可靠传输(因为错误的帧丢弃了,接收端并没有收到)。

可靠传输:数据链路层发什么,接收端就接收什么。

例题:在CRC中,接收端检测出某一位数据错误后,纠正的方法是()
  A.请求重发   B.删除数据   C.通过余数值自行纠正   D.以上均可

答案:D;CRC可以纠正一位或多位错误(由多项式G(x)决定),而实际传输中纠正方法可以按需求进行选择,在计算机网络中,ABC三种方法都是很常见的

例题:说明CRC码的纠错原理和方法。对4位有效信息(1100)求循环校验码,选择生成多项式(1011)

答案:在CRC码中,选择适当的生成多项式G(x),在计算机二进制信息M(x)的长度确定时,余数与CRC出错位的对应关系是不变的,因此可以用余数作为判断出错位置的依据而纠正错码。CRC码的检错方法如下:接受数据时,将接收的CRC码与G(x)相除,若余数为0,则表明数据正确;若余数不为0,说明数据有错。若G(x)选择适当,余数还可以判断出错的位置,从而实现纠错。

1100的循环校验码为1100 010

1.9.3海明(汉明)码

海明码实际上是一种多重奇偶校验码。其实现原理是在有效信息位中加入几个校验位形成海明码,并把海明码的每个二进制位分配到几个奇偶校验组中。当某一位出错后,就会引起有关的几个校验位的值发生变化,这不但可以发现错位,还能指出错位的位置。汉明码有一位纠错能力。

可以发现比特错,但是只能纠正比特错。

工作原理:动一发而牵全身:L-1=D+C且D>=C

工作流程:

  1. 确认校验码位数r

    n为有效信息位数,k为校验位的位数,则n和k应满足海明不等式n+k<=2^k-1。

  2. 确定校验码和数据的位置

  3. 求出校验码的值

  4. 检错并纠错

海明不等式:
2 r ≥ k + r + 1 2^r \ge k+r+1 2rk+r+1
r:冗余信息位(校验码位数)
k:信息位(原始数据的位数)

例子:数据D=101101
∴ 数据位数k=6
∵ 海明不等式
∴ 满足不等式的最小r=4
∴ D的海明码应该有6+4=10位
其中原数据6位,效验码4位

校验码是插入原数据之中的,而且,只能放在2的几次方的位置

设4位效验码依次是p1, p2, p3, p4,则它们放在

位数12345678910
二进制0001001000110100010101100111100010011010
代码p1p2d1p3d2d3d4p4d5d6
实际值0010011101

一个校验码可以校验多位数据:

p1的二进制位1在末尾,所以它可以效验1在末尾的数据。
求p1。令所有要校验的位异或为0p1⊕d1⊕d2⊕d4⊕d5=0
将代码对应的实际值代入,得到p1=0

同理,p2的1在第二位,p2⊕d1⊕d3⊕d4⊕d6=0,p2=0

p3=0,p4=1

所以,D=101101的海明码就是0010011101

当接收方收到时候,就会重复上述异或过程,就会检查出那个比特出错了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/405027.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS7设置默认免密登录用户root

CentOS7设置默认免密登录用户root 步骤1、打开要更改的 CentOS 系统2、切换到root用户2、reboot重启系统 步骤 1、打开要更改的 CentOS 系统 2、切换到root用户 2、reboot重启系统

如何基于AI大模型来做数据治理?

在数字化时代的浪潮中&#xff0c;数据治理已成为企业管理的核心议题。随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;尤其是大型语言模型&#xff08;如GPT-4&#xff09;的涌现&#xff0c;AI大模型在数据治理中的应用正逐渐成为一种创新且有效的解决方案…

LLM才硬件(显存)需求

参考&#xff1a; https://www.hardware-corner.net/guides/computer-to-run-llama-ai-model/ GitHub - hiyouga/LLaMA-Factory: Efficiently Fine-Tune 100 LLMs in WebUI (ACL 2024) 直观的一个表&#xff1a;

利用队列收集单双击和长按按键

利用队列收集单双击和长按按键 引言 当我们仅仅通过在while循环里面进行判断按键类型的标志位, 然后进行操作的时候, 我们的最小例程很小, 所以能够实时的检测到按键,从而触发实验现象. 假如我们此时进入了一个事件处理函数呢 ? 并且这个这个函数的操作是不可被打断的, 如果此…

修改Docker的默认网段

1、确认修改前docker网段 [rootkfk12 ~]# ifconfig docker0 2、修改docker配置设置网段 [rootkfk12 ~]# cat > /etc/docker/daemon.json << EOF{ "registry-mirrors": [ "https://vh3bm52y.mirror.aliyuncs.com", "https://regi…

C:每日一题:字符串左旋

题目&#xff1a;实现一个函数&#xff0c;可以实现字符串的左旋 例如&#xff1a;ABCD左旋一个字符就是BCDA&#xff1b;ABCD左旋两个字符就是CDAB&#xff1b; 1、解题思路&#xff1a; 1.确定目标旋转k个字符&#xff0c;我们要获取字符串的长度 len&#xff0c;目的是根…

PyCharm单步调试

1、先在入口设置断点&#xff0c;再点击爬虫图标&#xff08;shift F9&#xff09;开始调试 调试图标如图&#xff1a; 2、蓝色光标表示当前运行在这行 3、快捷键 F7&#xff1a;进入当前行函数 F8&#xff1a;单步 F9&#xff1a;全速运行

Nuclei文件上传小Tips

前言 Nuclei对于文件上传类型Poc编写小Tips 平台 ProjectDiscovery Cloud Platform: https://cloud.projectdiscovery.io/ JsonPath: https://jsonpath.com/ Json解析&#xff1a; 在线json解析平台即可 案例 某康resourceOperations upload接口存在前台上传 具体接口&…

财务会计与管理会计(十一)

文章目录 快速切换日记账余额SUMPRODUCT、LOOKUP函数应用 销售业绩分段统计表SUMPRODUCT函数的应用 自动打印发票签收单VLOOKUP函数的应用 快速切换日记账余额 SUMPRODUCT、LOOKUP函数应用 C2SUMPRODUCT((A5:A100B2)*C5:C100) D2SUMPRODUCT((A5:A100B2)*D5:D100) E4公式1&…

【时时三省】(C语言基础)数据的额存储

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 例题1: i>0恒成立 会进入死循环 因为unsigned是无符号数 所以不可能会有负数 就会进入死循环 注意:i打印的时候如果它上面类型是无符号数 但是打印是%d 它会打印有符号数 例题:2 这个循…

集团数字化转型方案(二)

集团数字化转型方案通过整合物联网&#xff08;IoT&#xff09;、大数据分析、人工智能&#xff08;AI&#xff09;和云计算技术&#xff0c;构建了一个全面智能化的业务平台&#xff0c;从而实现了全集团范围内的业务流程自动化、数据驱动决策优化、以及客户体验的个性化提升。…

如何利用Jmeter从0到1做一次完整的压测

压测&#xff0c;在很多项目中都有应用&#xff0c;是测试小伙伴必备的一项基本技能&#xff0c;刚好最近接手了一个小游戏的压测任务&#xff0c;一轮压测下来&#xff0c;颇有收获&#xff0c;赶紧记录下来&#xff0c;与大家分享一下&#xff0c;希望大家能少踩坑。 一、压…

【Py Error002】python rarfile解压 Cannot find working tool

1.欢迎点赞、关注、批评、指正&#xff0c;互三走起来&#xff0c;小手动起来&#xff01; 2.了解、学习Python批量解压zip、rar压缩包文件&#xff0c;并结合日常的场景进行测试。 文章目录 1.问题详情2.解决办法3.参考链接 1.问题详情 Python代码解压rar压缩包报错&#xff…

秃姐学AI系列之:池化层 + 代码实现

目录 池化层 二维最大池化层 Max Pooling 池化层超参数 平均池化层 Mean Pooling 总结 代码实现 池化层 卷积对位置非常敏感的&#xff0c;但是我们在实际应用中我们需要一定程度的平移不变性。比如照明、物体位置、比例、外观等因素会导致图片发生变化。所以卷积对未…

ollama使用llama3.1案例

ollama安装和运行llama3.1 8b conda create -n ollama python3.11 -y conda activate ollama curl -fsSL https://ollama.com/install.sh | sh ollama run songfy/llama3.1:8b 就这么简单就能运行起来了. 我们可以在命令行中与他交互. 当然我们也可以用接口访问: curl http:…

DQL-案例

一.题目: 1&#xff09;分析: 1.有 姓名 &#xff0c;性别&#xff0c;入职时间(需要开始时间和结束时间-->范围查询); 2.右下角有分页条-->需要分页展示 2&#xff09;创建表的代码&#xff1a; -- 员工管理 create table emp (id int unsigned primary ke…

linux知识

内核是操作系统的核心部分&#xff0c;它是基于硬件的第一层软件扩充&#xff0c;提供操作系统的最基本功能&#xff0c;是操作系统工作的基础。内核的主要职责包括管理系统的进程、内存、设备驱动程序、文件和网络系统等&#xff0c;这些功能共同决定了系统的性能和稳定性。 …

武汉流星汇聚:西班牙时尚消费高涨,中国商家借亚马逊平台拓商机

在2024年第二季度的亚马逊西班牙站&#xff0c;一场前所未有的时尚盛宴正悄然上演。销售额同比高增长TOP10品类榜单的揭晓&#xff0c;不仅揭示了西班牙消费者对于时尚品类的狂热追求&#xff0c;更为亚马逊平台上的中国商家开启了一扇通往新蓝海的大门。其中&#xff0c;男士拳…

极速闪存启动:SD与SPI模式的智能初始化指南

最近很多客户朋友在询问我们 CS 创世 SD NAND 能不能使用 SPI 接口&#xff0c;两者使用起来有何区别&#xff0c;下面为大家详细解答。 SD MODE: CS 创世 SD NAND 支持 SD 模式和 SPI 模式&#xff0c;SD NAND 默认为 SD 模式&#xff0c;上电后&#xff0c;其初始化过程如下…

系统架构:分而治之

系统架构&#xff1a;分而治之 引言“分而治之”在架构中的应用模块化设计分层化架构微服务架构 分而治之的优势降低复杂性提高灵活性和可扩展性增强可维护性促进团队协作 分而治之的劣势复杂性转移性能开销开发和运维的复杂性数据一致性挑战 结论 引言 “分而治之”是一种分析…