ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

计算机组成原理:数制与编码

计算机组成原理:数制与编码 文章目录前言一、进位计数制从十进制到二进制的本质1.1 什么是进位计数制1.2 计算机为什么选择二进制1.3 数制转换的核心方法1R进制 → 十进制按权展开求和2十进制 → R进制整数小数分开处理3二进制 ↔ 八/十六进制分组快速转换二、数值的机器编码定点数与补码的智慧2.1 定点数小数点“固定”的数值表示2.2 原码、反码、补码、移码四种编码的对比补码计算机运算的核心选择2.3 补码运算与溢出判断2.4 浮点数用科学计数法扩大表示范围IEEE 754 标准三、字符编码让计算机读懂人类文字3.1 ASCII码西文字符的基石3.2 汉字编码从国标到统一3.3 Unicode与UTF-8全球化的编码方案核心区别UTF-8的变长编码规则四、校验码数据传输的容错机制4.1 奇偶校验最简单的检错码4.2 海明码能纠错的分组校验4.3 CRC循环冗余校验五、总结前言当我们在键盘上敲下文字、在屏幕上看到数字、运行程序进行计算时计算机底层其实只在做一件事处理0和1的电信号。从人类熟悉的十进制数字、中英文文字到机器能识别的二进制数据中间的桥梁就是数制与编码。它是计算机组成原理的入门第一课也是理解CPU运算、存储器设计、数据传输的底层逻辑基础。今天我们就从原理出发彻底搞懂数制转换、数值编码、字符编码和校验码的核心逻辑。提示以下是本篇文章正文内容下面案例可供参考一、进位计数制从十进制到二进制的本质1.1 什么是进位计数制任何一种数制都包含三个核心要素数码数制中表示基本数值的符号比如十进制的0~9基数数码的个数十进制基数为10二进制基数为2位权每一位数码对应的权重是基数的幂次比如十进制百位的位权是10²我们熟悉的十进制本质就是“逢十进一”每一位的数值 数码 × 对应位权。1.2 计算机为什么选择二进制这不是偶然而是硬件层面的必然物理实现简单电路的通/断、电平的高/低刚好对应0和1两种状态运算规则简单二进制加法、乘法规则远少于十进制简化运算电路设计可靠性高两种状态区分度高抗干扰能力强计算机中常用的数制除了二进制还有八进制、十六进制本质是二进制的“简写形式”——3位二进制对应1位八进制4位二进制对应1位十六进制方便人类读写。1.3 数制转换的核心方法1R进制 → 十进制按权展开求和把每一位数码乘以对应位权相加得到十进制结果。例二进制1011.01转十进制1×2³ 0×2² 1×2¹ 1×2⁰ 0×2⁻¹ 1×2⁻² 8 0 2 1 0 0.25 11.252十进制 → R进制整数小数分开处理整数部分除基取余逆序排列。不断除以基数记录余数直到商为0余数从下往上读。小数部分乘基取整顺序排列。不断乘以基数记录整数部分直到小数为0或达到精度要求整数从上往下读。例十进制13.625转二进制整数1313÷2余16÷2余03÷2余11÷2余1 → 逆序为1101小数0.6250.625×21.25取10.25×20.5取00.5×21.0取1 → 顺序为101最终结果1101.1013二进制 ↔ 八/十六进制分组快速转换二进制转八进制从小数点开始整数左、小数右每3位一组不足补0每组对应1位八进制数二进制转十六进制每4位一组对应1位十六进制数例二进制1011010.11转十六进制整数补00101 1010→ 5 A小数补01100→ C结果5A.C二、数值的机器编码定点数与补码的智慧数制解决了“数值怎么表示”但在计算机里正负号、小数点怎么存这就需要数值编码。2.1 定点数小数点“固定”的数值表示定点数约定小数点的位置固定不变分为两种定点整数小数点在最低位之后所有位都是整数部分定点小数小数点在符号位之后所有位都是小数部分定点数的优点是电路简单缺点是表示范围小精度和范围难以兼顾。2.2 原码、反码、补码、移码四种编码的对比对于有符号数最高位为符号位0正1负剩下的是数值位四种编码规则不同编码类型正数规则负数规则零的表示核心用途原码符号位0 数值位符号位1 数值位两种0和-0直观人类易读反码与原码相同符号位不变数值位按位取反两种0和-0补码的过渡补码与原码相同反码末位加1唯一全0CPU运算减法变加法移码补码符号位取反补码符号位取反唯一浮点数阶码方便比较补码计算机运算的核心选择补码是计算机中最重要的编码它解决了两个关键问题统一加减法电路减法可以转化为“加上负数的补码”CPU只需要加法器就能完成所有运算大幅简化硬件设计。零的表示唯一8位原码中0是00000000-0是10000000补码中只有00000000表示0多出的10000000用来表示-128扩大了表示范围。8位二进制编码范围对比原码-127 ~ 127补码-128 ~ 1272.3 补码运算与溢出判断补码加法规则[AB]补 [A]补 [B]补当运算结果超出表示范围时就会发生溢出常用双符号位法变形补码判断双符号位相同00/11无溢出双符号位不同01/10溢出01正溢10负溢2.4 浮点数用科学计数法扩大表示范围定点数范围有限要表示极大或极小的数就需要浮点数本质是二进制的科学计数法N 尾数M × 2^阶码E一个浮点数由阶码和尾数两部分组成阶码整数常用移码表示小数点的位置尾数定点小数常用补码/原码表示有效数字IEEE 754 标准现代计算机通用的浮点数标准分为单精度32位float和双精度64位double类型符号位S阶码E尾数M总位数阶码偏移量单精度float1位8位23位32位127双精度double1位11位52位64位1023关键规则规格化浮点数的尾数最高位默认是1不存储节省1位空间隐藏位1阶码用移码表示偏移量为127单精度即真实阶码 阶码值 - 127例十进制5.25转IEEE754单精度转二进制5.25 101.01 1.0101 × 2²符号位S0正数阶码E 2 127 129 10000001尾数M 0101 后面补0到23位01010000000000000000000最终0 10000001 01010000000000000000000三、字符编码让计算机读懂人类文字数值可以转二进制但文字、符号怎么表示答案是字符编码——给每个字符分配唯一的二进制编号。3.1 ASCII码西文字符的基石ASCII美国信息交换标准代码是最早的通用字符编码用7位二进制表示128个字符包括大小写字母、数字、标点和控制字符。计算机中用1字节8位存储最高位默认0扩展ASCII则用最高位表示额外128个字符。3.2 汉字编码从国标到统一汉字数量多1字节不够用因此发展出多字节编码GB2312最早的国标码2字节编码收录6763个常用汉字GBKGB2312的扩展兼容前者收录2万多汉字包含繁体GB18030最新国标变长编码覆盖更多字符3.3 Unicode与UTF-8全球化的编码方案核心区别Unicode是字符集给全世界所有字符分配唯一的“编号”码点不关心怎么存储UTF-8是Unicode的一种编码实现方式规定码点怎么转成二进制字节流UTF-8的变长编码规则UTF-8用1~4字节表示一个字符兼容ASCII单字节ASCII字符以0开头0xxxxxxx多字节首字节前n个1表示总字节数后续字节都以10开头2字节110xxxxx 10xxxxxx3字节1110xxxx 10xxxxxx 10xxxxxx4字节11110xxx 10xxxxxx 10xxxxxx 10xxxxxxUTF-8是目前互联网的主流编码优势是兼容ASCII、无字节序问题、节省英文存储空间。四、校验码数据传输的容错机制数据在存储、传输过程中可能发生位翻转0变1/1变0校验码就是用来检测甚至纠正错误的编码。4.1 奇偶校验最简单的检错码在数据位后加1位校验位使整个编码中1的个数为奇数奇校验或偶数偶校验。优点实现简单开销小缺点只能检测1位错误无法检测偶数位错误也不能纠错4.2 海明码能纠错的分组校验海明码通过在数据位中插入多个校验位对数据进行分组奇偶校验不仅能检测1位错误还能定位错误位置并自动纠正。校验位位置第2⁰、2¹、2²……位即1、2、4、8……位核心原理每个校验位负责一组数据位出错时通过各组校验结果的异或直接定位错误位4.3 CRC循环冗余校验CRC基于多项式除法用生成多项式对数据做模2运算生成校验码冗余码接收方用同样的多项式校验。它检错能力强、计算速度快广泛用于网络通信、磁盘存储等场景。五、总结数制与编码看似是计组的入门知识点实则贯穿整个计算机体系数制是数值表示的基础二进制是硬件物理特性的选择补码等数值编码简化了CPU运算电路是计算机算术运算的核心字符编码搭建了人类语言与机器语言的桥梁校验码保障了数据存储与传输的可靠性理解这些底层逻辑你才能明白为什么int类型范围是-2147483648到2147483647为什么浮点数会有精度丢失为什么编程时会遇到乱码问题——本质都是数制与编码在底层的体现。
返回列表