计算机组成原理——数据的表示

2.1数据的表示

整理自Beokayy_

1.进制转换

十六进制与二进制的转换

一位十六进制等于四位二进制

四位二进制等于一位十六进制

0x173A4C=0001 0111 0011 1010 0100 1100

十六进制与十进制的转换

十六转十:每一位数字乘以相应的16的幂再相加

十转十六:先短除法转二,再四位二进制对应一位十六进制

二进制与十进制的转换

十转二:短除法

二转十:每一位数字乘以相应的2的幂乘再相加

2.机器数与真值

真值:带有正负号的数值

机器数:需要按照编码形式来解释其含义

这两个概念是最初始的概念,不要与后面的各种编码混淆

3.定点数与浮点数

定点数

小数点位置不变的表示方法叫做定点表示法,用这种方法表示出的数叫做定点数。

定点数理论上可以表示整数和小数。

  • 对于纯整数和纯小数,可以直接二进制转换,因为小数点分别在最低位和最高位
  • 对于整数加小数,则需要约定小数点的位置。例如约定八位二进制数前五位是整数,后三位是小数。此时表达的精度不够,范围也很低。

综上,定点数通常用来表示小数。

浮点数

计算机中使用浮点数表示小数,类似于数学中的科学计数法。

IEEE浮点标准用V=(-1)S*M*2 E的形式来表示一个数:

  • 符号位S:决定这个数是正数(S=0)还是负数(S=1)。
  • 尾数M:M是一个二进制小数,在IEEE754标准中用原码表示。
  • 阶码E:对浮点数加权,这个权重是2的E次幂,在IEEE754标准中用移码表示。

4.带符号数的编码

为了能方便地对机器数进行算术运算,计算机设计了多种符号位与数值一起编码的方法,最常用的编码方式为:原码、反码、补码以及移码。

原码

  • 用机器数的最高位表示数的符号,其余各位表示数的绝对值。
  • 真值0的原码表示有两种,即[+0]原=00000和[-0]原=10000。

补码

  • 正数的补码与原码相同,负数的补码符号位为1,其他位为原码取反,未位加1。
  • 补码系统的最大优点是可以在加法或减法处理中,加法电路就可以处理各种有符号数加法,而且减法可以用一个数加上另一个数的补码来表示,因此只要有加法电路和补码电路即可以完成各种有符号数加法和减法,在电路设计上相当方便。
  • 计算机中的带符号数都用补码表示。
  • 特别规定:[x]补=10000000=-128,[x]补=1.0000000=-1。因此,小数补码比原码多表示一个"-1",正数补码比原码多表示一个"-2(n-1)"(机器字长为n)。
  • 真值0的补码表示是唯一的,即[+0]补=[-0]补=00000。
  • 用权值理解补码(补码一步得到真值):
    按照二进制转十进制的加权求值法,但是符号位的权值是负的。
    • 例如:10110=-24+22+21=-10

反码

原码和补码转换的媒介

  • 正数:原码反码补码相同
  • 负数:符号位不变其余取反

移码

  • 移码=真值X+偏置常数,后者通常取2(n-1)(机器字长为n)。
  • 在补码的基础上将符号位取反,即可得到移码。
  • 移码常用来表示浮点数的阶码。

5.无符号数的编码

  • 在讨论无符号数时,一般情况默认为无符号整数。
  • 对于字长相同的情况下,无符号数省略了一位符号位,因此它能表示的最大数比带符号整数能表示的要大。
  • 常用无符号整数进行地址运算,或者用它来表示指针。
  • 用权值理解无符号数(无符号数一步得到真值):直接用二进制转十进制

6.寻址和字节顺序

编址方式

按字节编址
  • 每一个字节编一个地址
  • 假设一个数据32位,就需要分到4个地址
按字长编址
  • 每一个存储字长一个地址
  • 假设字长32位,32位的数据一个地址,64位的数据两个地址
按半字长编址
  • 每半个存储字长一个地址
  • 假设字长32位,32位的数据两个地址,64位的数据四个地址

寻址

无特殊说明,连续字节存储的数据按照地址低位作为整个数据的地址

字节顺序

大端

数据高位存放在地址低位

  • 数字12345678分得01 02 03 04四个地址。将12存在01,以此类推。得到12345678.
小端

数据低位存放在地址低位

  • 数字12345678分得01 02 03 04四个地址。将12存在04,以此类推。得78563412

7.边界对齐

K字节的对象的地址必须是K的倍数

例如:

  • a和b分别是1字节和4字节。如果不边界对齐,a分到的地址是00,b分到的地址是01020304。
  • 假设计算机的存取字长是4字节,访问b需要取两次,。第一次取00010203,第二次04050607,效率低。
  • 按照对齐原则,b的地址应该是04050607。这样就只需一次就取到了b。

8.符号扩展

原码

  • 符号位不变,中间以0扩展

补码

  • 整数:向左扩展,补1
  • 小数:向右扩展,补0
相关推荐
Chef_Chen4 小时前
从0开始学习R语言--Day18--分类变量关联性检验
学习
键盘敲没电4 小时前
【IOS】GCD学习
学习·ios·objective-c·xcode
海的诗篇_5 小时前
前端开发面试题总结-JavaScript篇(一)
开发语言·前端·javascript·学习·面试
AgilityBaby5 小时前
UE5 2D角色PaperZD插件动画状态机学习笔记
笔记·学习·ue5
AgilityBaby5 小时前
UE5 创建2D角色帧动画学习笔记
笔记·学习·ue5
武昌库里写JAVA6 小时前
iview Switch Tabs TabPane 使用提示Maximum call stack size exceeded堆栈溢出
java·开发语言·spring boot·学习·课程设计
一弓虽7 小时前
git 学习
git·学习
Moonnnn.9 小时前
【单片机期末】串行口循环缓冲区发送
笔记·单片机·嵌入式硬件·学习
viperrrrrrrrrr710 小时前
大数据学习(131)-Hive数据分析函数总结
大数据·hive·学习
fen_fen10 小时前
学习笔记(26):线性代数-张量的降维求和,简单示例
笔记·学习·算法