当前位置: 首页 > news >正文

四、计算机组成原理——第2章:数据的表示和运算

目录

2.1数制与编码

2.1.1进位计数制及其相互转换

1.进位计数制

2.不同进制数之间的相互转换

(1)二进制数转换为八进制数和十六进制数

(2)任意进制数转换为十进制数

(3)十进制数转换为任意进制数

2.1.2定点数的编码表示

1.真值和机器数

2.机器数的定点表示

3.原码、补码、反码、移码

(1)原码表示法

(2)补码表示法

●几个特殊数据的补码表示

●模运算(了解即可)

●补码与真值之间的转换

●变形补码

(3)反码表示法(了解即可)

(4)移码表示法

2.1.3整数的表示

1.无符号整数的表示

2.有符号整数的表示

2.1.4 C语言中的整数类型及类型转换

1.C语言中的整型数据类型

2.有符号数和无符号数的转换

3.不同字长整数之间的转换

2.2运算方法和运算电路

2.2.1基本运算部件

1.一位全加器

2.串行进位加法器

3.并行进位加法器

4.带标志加法器

5.算术逻辑单元(ALU)

2.2.2定点数的移位运算

1.逻辑移位

2.算术移位

2.2.3定点数的加减运算

1.补码的加减法运算

2.溢出判别方法

(1)采用一位符号位

(2)采用双符号位

3.加减运算电路

(1)无符号数大小的比较

(2)有符号数大小的比较

4.原码的加减法运算

2.2.4定点数的乘除运算

1.定点乘法运算

(1)乘法运算的基本原理

(2)乘法运算电路

2.除法运算

(1)除法运算的基本原理

2.3浮点数的表示与运算

2.3.1浮点数的表示

1.浮点数的表示格式

2.浮点数的表示范围

3.浮点数的规格化

4.IEEE754标准

5.定点、浮点表示的区别

(1)数值的表示范围

(2)精度

(3)数的运算

(4)溢出问题

2.3.2浮点数的加减运算

1.对阶

2.尾数加减

3.尾数规格化

4.舍入

5.溢出判断

2.3.3 C语言中的浮点数类型

2.3.4数据的大小端和对齐存储

1.数据的“大端方式”和“小端方式”存储

2.数据按“边界对齐”方式存储

2.4本章小结



2.1数制与编码

2.1.1进位计数制及其相互转换

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

1)二进制只有两种状态,使用有两个稳定状态的物理器件就可以表示二进制数的每一位,制造成本比较低,例如用高、低电平或电荷的正、负极性都可以很方便地表示0和1。

2)二进制位1和0正好与逻辑值“真”和“假”相对应,为计算机实现逻辑运算和程序中的逻辑判断提供了便利条件。

3)二进制的编码和运算规则都很简单,通过逻辑门电路能方便地实现算术运算。

1.进位计数制

常用的进位计数制有十进制、二进制、八进制、十六进制等。十进制数是日常生活中最常使用的,而计算机中通常使用二进制数、八进制数和十六进制数。

在进位计数制中,每个数位所用到的不同数码的个数称为基数。十进制的基数为10(0~9),每个数位计满10就向高位进位,即“逢十进一”。十进制数101,其个位的1显然与百位的1所表示的数值是不同的。每个数码所表示的数值等于该数码本身乘以一个与它所在数位有关的常数,这个常数称为位权。一个进位数的数值大小就是它的各位数码按权相加。一个r进制数(K,Kn-1…K₀K-1.…K-m)的数值可表示为:

r是基数;P是第i位的位权;K;的取值可以是0,1,…,r-1共r个数码中的任意一个。

1)二进制。计算机中用得最多的是基数为2的计数制,即二进制。二进制只有0和1两种数码,计数“逢二进一”。它的任意数位的权为2',i为所在位数。

2)八进制。基数为8,有0~7共8个不同的数码。计数逢八进一。因为r=8=2³,所以把二进制中的3位数码编为一组就是1位八进制数码,两者之间的转换极为方便。

3)十六进制。基数为16,有0~9、A~F共16个不同的数码,其中A~F分别表示10~15。计数逢十六进一。因为r=16=2⁴,所以4位二进制数码与1位十六进制数码相对应。

可以用后缀字母标识一个数的进位计数制,用B表示二进制数,用0表示八进制数,用D表示十进制数(通常直接省略),用H表示十六进制数,有时也用前缀0x表示十六进制数。

2.不同进制数之间的相互转换

(1)二进制数转换为八进制数和十六进制数

对于一个二进制小数(既包含整数部分,又包含小数部分),在转换时应以小数点为界。其整数部分,从小数点开始往左数,将一串二进制数分为3位(八进制)一组或4位(十六进制)一组,在数的最左边可根据需要加“0”补齐;对于小数部分,从小数点开始往右数,也将一串二进制数分为3位一组或4位一组,在数的最右边也可根据需要加“0”补齐。最终使总的位数为3或4的整数倍,然后分别用对应的八进制数或十六进制数取代。

同样,由八进制数或十六进制数转换为二进制数,只需将每位改为3位或4位二进制数即可(必要时去掉整数最高位或小数最低位的0)。八进制数和十六进制数之间的转换也能方便地实现,十六进制数转换为八进制数(或八进制数转换为十六进制数)时,先将十六进制(八进制)数转换为二进制数,然后由二进制数转换为八进制(十六进制)数较方便。

(2)任意进制数转换为十进制数

将任意进制数的各位数码与它们的权值相乘,再把乘积相加,就得到了一个十进制数。这种方法称为按权展开相加法。例如,(11011.1₂=1×2⁴+1×2³+0×2²+1×2¹+1×2⁰+1×2-¹=27.5。

(3)十进制数转换为任意进制数

一个十进制数转换为任意进制数,通常采用基数乘除法(注意,基数的值与进制相关)。这种转换方法对十进制数的整数部分和小数部分将分别进行处理,对整数部分采用除基取余法,对小数部分采用乘基取整法,最后将整数部分与小数部分的转换结果拼接起来。


2.1.2定点数的编码表示

1.真值和机器数

在日常生活中,通常用正号、负号来分别表示正数(正号可省略)和负数,如+15、-8等。这种带“+”或“-”符号的数称为真值。真值是机器数所代表的实际值。在计算机中,通常将数的符号和数值部分一起编码,将数据的符号数字化,通常用“0”表示“正”,用“1”表示“负”。这种把符号“数字化”的数称为机器数。常用的有原码、补码和反码表示法。如0,101(这里的逗号“,”仅用于区分符号位与数值位)表示+5。

2.机器数的定点表示

根据小数点的位置是否固定,在计算机中有两种数据格式:定点表示和浮点表示。在现代计算机中,通常用补码整数表示整数,用原码小数表示浮点数的尾数部分,用移码表示浮点数的阶码部分,历年统考真题的命题信息也主要落在这个范畴之内。

定点表示法用来表示定点小数和定点整数。

1)定点小数。定点小数是纯小数,约定小数点位置在符号位之后、有效数值部分最高位之前。若数据X的形式为X=X0XlX2.Xn,(其中X₀为符号位,X₁~Xn,是数值的有效部分,也称尾数,X₁为最高有效位)。

2)定点整数。定点整数是纯整数,约定小数点位置在有效数值部分最低位之后。若数据X的形式为X=X0XlX2.Xn,(其中X₀为符号位,X₁~Xn,是数值的有效部分,也称尾数,X₁为最低有效位)。

事实上,在机器内部并没有小数点,只是人为约定了小数点的位置。因此,在定点数的编码和运算中不用考虑对应的定点数是小数还是整数,而只需关心它们的符号位和数值位即可。

3.原码、补码、反码、移码

(1)原码表示法

用机器数的最高位表示数的符号,其余各位表示数的绝对值。原码的定义如下。

(注:零的原码表示有正零和负零两种形式,即[+0]原=0,0000000和[-0]原=1,0000000。)

原码表示的优点:①与真值的对应关系简单、直观,与真值的转换简单;②用原码实现乘除运算比较简便。缺点:①0的表示不唯一,有±0两个编码;②用原码实现加减运算比较复杂。

(2)补码表示法

补码表示法中的加减运算统一采用加法操作实现。正数的补码和原码相同,负数的补码等于模(n+1位补码的模为2n+¹)与该负数绝对值之差。补码的定义如下:

若字长为n+1,则补码整数的表示范围为-2"≤x≤2"-1(比原码多表示“-2"”)。

●几个特殊数据的补码表示
  1. [+0]#=[-0]=0,00….0(含符号位共n+1个0),说明0的补码表示是唯一的。

2)[-1]#=2n+¹-1=1,11…1(含符号位共n+1个1)。

3)[2n-1]补=0,11….1(n个1),即n+1位补码能表示的最大整数。

4)[-2"]=1,00….0(n个0),即n+1位补码能表示的最小整数。

●模运算(了解即可)

在模运算中,一个数与它除以“模”后得到的余数是等价的,如A、B、M满足A=B+K×M(K为整数),记为A=B(modM),即A、B各除以M后的余数相同。在补码运算中,[A-[B]π=[A]#+M-[B]n,而M[B]=[-B],因此补码可以借助加法运算来实现减法运算。

●补码与真值之间的转换

真值转换为补码:对于正数,与原码的方式一样。对于负数,符号位取1,其余各位由数值部分“按位取反,末位加1”得到。补码转换为真值:若符号位为0,与原码的方式一样。若符号位为1,真值的符号为负,数值部分由补码数值部分“按位取反,末位加1”得到。

●变形补码

为便于判断运算结果是否溢出,还采用一种双符号位的补码表示,称为变形补码,也称模4补码。在双符号位中,左符表示真正的符号位,右符用于判断“溢出”。假定变形补码的位数为n+1(其中符号位占2位,数值位占n-1位),则变形补码可表示为

变形补码的双符号位00表示正,11表示负。

(3)反码表示法(了解即可)

在计算机内部,反码是原码转换补码的中间表示形式。负数的补码可采用“按位取反,末位加1”的方法得到,若仅“按位取反”而末位不加1,则就是负数的反码表示。正数的反码表示和相应的原码表示相同。

反码表示存在以下几个方面的不足:①0的表示不唯一(存在±0);②表示范围比补码少一个最小负数。因此,反码在计算机中很少使用。

(4)移码表示法

移码常用来表示浮点数的阶码,它只能表示整数。移码就是在真值X上加上一个常数(偏置值),通常这个常数取2”,相当于X在数轴上向正方向偏移了若干单位,这就是“移码”一词的由来。移码的定义如下。

[x]移=2n+x(-2n≤x<2”,其中机器字长为n+1)

例如,若正数x₁=+10101,x₂=-10101,字长为8位,偏置值为2⁷,则其移码表示为[x₁]=2⁷+10101=1,0010101;[x₂]移=2⁷+(-10101)=0,1101011。

移码(假设机器字长为n+1,偏置值为2")具有以下特点:

①移码中零的表示唯一,[+0]移=2n+0=[-0]移=2n-0=1,00.….0(n个“0”)。

②一个真值的移码和补码仅差一个符号位,[x]的符号位取反即得[x]v(“1”表示正,“0”表示负,这与其他机器数的符号位取值正好相反),反之亦然。

③移码全0时,对应真值的最小值-2";移码全1时,对应真值的最大值2"-1。

④移码保持了数据原有的大小顺序,移码大真值就大,移码小真值就小。

原码、补码、反码和移码这4种编码表示的总结如下:

①原码、补码、反码的符号位相同,正数的机器码相同。

②原码、反码的表示在数轴上对称,二者都存在+0和-0两个0。

③补码、移码的表示在数轴上不对称,零的表示唯一,它们比原码、反码多表示一个数。

④原码很容易判断大小。而负数的补码、反码很难直接判断大小,可采用如下规则快速判断:对于负数,数值位部分越小,其绝对值越大,即负得越多。


2.1.3整数的表示

1.无符号整数的表示

当一个编码的全部二进制位均为数值位而没有符号位时,该编码表示就是无符号整数,简称无符号数。此时,默认数的符号为正。因为无符号整数省略了一位符号位,所以在字长相同的情况下,它能表示的最大数比有符号整数能表示的大。一般在全部是正数运算且不出现负值结果的场合下,使用无符号整数表示。例如,可用无符号整数进行地址运算,或用它来表示指针。

例如,对8位无符号整数,最小数为00000000(值为0),最大数为11111111(值为2⁸-1=255),即表示范围为0~255;而对于8位有符号整数(补码表示),最小数为10000000(值为-2⁷=-128),最大数为01111111(值为2⁷-1=127),即表示范围为-128~127。

2.有符号整数的表示

将符号数值化,并将符号位放在有效数字的前面,就组成了有符号整数。虽然前面介绍的原码、补码、反码和移码都可以用来表示有符号整数,但补码表示有其明显的优势:

①与原码和反码相比,0的补码表示唯一。

②与原码和移码相比,补码运算规则比较简单,且符号位可以和数值位一起参加运算。

③与原码和反码相比,补码比原码和反码多表示一个最小负数。

计算机中的有符号整数都用补码表示,所以n位有符号整数的表示范围是-2"-¹~2"⁻¹-1。


2.1.4 C语言中的整数类型及类型转换

http://www.dtcms.com/a/302757.html

相关文章:

  • OpenLayers 综合案例-动态闪烁
  • YOLO11 改进、魔改|低分辨率自注意力机制LRSA ,提取全局上下文建模与局部细节,提升小目标、密集小目标的检测能力
  • Python将Word转换为Excel
  • eclipse更改jdk环境和生成webservice客户端代码
  • Linux应用管理与YUM/DNF指南
  • 迅为RK3568开发板OpeHarmony学习开发手册-配置电源管理芯片和点亮HDMI屏幕-配置电源管理芯片
  • ARM share memory
  • 智慧工地系统:科技赋能建筑新未来
  • 电子签章(PDF)
  • 阿里云可观测 2025 年 6 月产品动态
  • 【机器学习-4】 | 集成学习 / 随机森林篇
  • 以科力锐为例介绍常见的数据中心4种灾备方式
  • HDFS Block与Spark的partition对比
  • MCU+RTOS调试
  • unisS5800XP-G交换机配置命令之端口篇
  • 经典算法题解析:从思路到实现,掌握核心编程思维
  • 分布式数据库中的“分布式连接”(Distributed Joins)
  • YOLOv8 基于RTSP流目标检测
  • 【C++详解】深入解析继承 类模板继承、赋值兼容转换、派生类默认成员函数、多继承与菱形继承
  • 把振动数据转成音频并播放
  • Kubernetes --存储入门
  • 实时YOLO目标检测与跟踪系统设计
  • [蓝牙通信] 临界区管理 | volatile | 同步(互斥锁与信号量) | handle
  • 谷歌浏览器深入用法全解析:解锁高效网络之旅
  • UVA11990 ``Dynamic‘‘ Inversion
  • kotlin基础【3】
  • 第一章:Go语言基础入门之流程控制
  • Power Query合并数据
  • 力扣 hot100 Day58
  • JAVA东郊到家按摩服务同款同城家政服务按摩私教茶艺师服务系统小程序+公众号+APP+H5