C2-数据的表示
数据的机器级表示

数值分类
- 数值数据: unsigned int, signed int, float
- 非数值数据 : 逻辑数(包括位串), char
数值数据
二进制编码
所有数值采用二进制编码
二进制便于逻辑运算(T or F), 方便使用逻辑电路实现算术运算
真值 机器数
机器数 : 计算机内部的0/1编码序列
真值 : 实际数, 带正负号
数值数据的表示
三要素
- 进位计数制(二进制十进制...)
- 定点, 浮点表示
- 如何进行二进制编码
定点 浮点标志(解决小数点问题)
定点分为定点整数 定点小数
浮点数 = 定点小数 + 定点整数
定点数编码(解决正负号问题)
原码, 补码, 移码, 反码
进位计数制


进制转换
R > 10
按权展开

10 > R
整数小数分开转换
整数除基取余,上右下左

10 > 2
2^0 = 0, 2^1 = 1...
据此将数字拆分
小数"乘基取整,上左下右

8 16 > 2
每个数字改写为对应二进制

2 > 8 16
二进制数分组改写为对应进制

定点与浮点表示
小数点位置约定在固定位置的数称为定点数,小数点位置约定为可浮动的数称为浮点数.
计算机通过约定小数点位置来处理数值数据
定点表示法用来对定点小数和定点整数进行表示。
对定点小数,其小数点总是固定在数的左边,一般用来表示浮点数的尾数部分。
对于定点整数,其小数点总是固定在数的最右边,因此可用“定点整数”来表示整数。
浮点数

e.g. 785.652 = (-1)^0 * 0.785652 * 10^3
定点数的编码表示
原码
符号 - 数值
编码规则
符号位 0:+ 1:-, 数值位为数值的绝对值二进制的原始值
缺陷 0的表示不唯一: +0 -0, 加减法运算不统一, 不利于硬件设计(需要减法器), a < b时 a-b困难
补码
模运算规则
- 一个数与它除以“模”后得到的余数是等价的
- 一个负数的补码=模减去该数的绝对值
- 对于确定的模, 某数减去小于模的另一数, 等于该数加上另一数的负数的补码

补码表示

一般运算规则
- 机器数有n位, 模为2^n
- 一个负数的补码 = 符号位取1, 其余各位对真值各位取反 末位加一
- 一个正数的补码 = 符号位取0, 其余各位与真值相同
特殊数的补码




变形补码(模4补码)
符号位使用两位表示, 用以存放可能溢出的数. 两位符号位中, 左符是真正的符号位, 右符用来判别溢出。

补码 > 真值
理论

简便
正数: 数值部分与真值相同
负数: 数值各位取反, 末尾加一
移码
将每一个数值加上一个偏置常数(excess/ bias). 便于对浮点数加减运算时的对阶操作(比较大小), 使阶数不为负数
通常编码位数为n时, bias取 2^(n-1) 或 2^(n-1) -1
0的移码唯一, bias取 2^n -1时, 移码和补码仅第一位不同, 移码表述浮点数的阶码

规避数值正数与负数的比较, 简化运算
整数表示
分类 无符号整数, 带符号整数
无符号整数 unsigned integer
**无符号整数的编码中不存在符号位, 用于全部是正数运算且不存在负数的场景
字的排列方式
LSB最低有效位, MSB最高有效位. LSB MSB指的是某一位的数值为最低有效位或最高有效位.
机器一般将字从高到低按照从左到右的方式排列, 与日常使用一致.
带符号整数 signed integer
用MSB表示数符, 0正 1负
定点编码方式
- 原码 定点小数, 表示浮点数的尾数
- 移码 定点整数, 表述浮点数的阶
- 补码 表示带符号整数
C语言中的整数
常在数的后面加'U'或'u'表示无符号 e.g. 15U 0U
若无符号整数和带符号整数同时出现, C编译器会将带符号整数强制转换为无符号整数

No.3 0U使得计算机认为双方都是unsigned int, -1的符号位被视作数值, 会大于0
No.4 2147483647为2^31 -1, 右侧为-2^31 -1符号位参与判断, 正数大于负数
No.5 左侧的U使双方都被认为是unsigned, 负数的符号位1被视作数值, 大于21.....U
No.6 右侧数值首先按照无符号数进行编码, 然后强制转换int, 最高位数值位的1被视为符号, 为负数. 小于左侧正数
No.8 左侧强制转换为unsigned, 两侧的符号位1均被看成数值.

除非指定变量类型, 不然会据此进行默认的类型认定

-1的补码在32位中为32个1, 由于最低位是1 * 2^0, 简便计算为2^32 -1
浮点数

假设存在这样一种浮点数的规格化表示形式

23位尾数可以表示24位, 尾数用原码表示.
注: 规格化尾数的小数点后第一位固定为1, 且不在尾数M中呈现

IEEE 754

bias使用2^(n-1) -1
SP: 单精度, DP双精度
为了避免混淆, 用阶码表示阶的编码, 用阶或指数表示阶码的值
机器数 > 真值

特殊数表示
0: 符号sign: 0/1, 阶码exponent: all 0, 尾数significand: all zero
+/-∞: sign: +∞: 0, -∞: 1. exponent: 255(all 1), significand: all 0.
非数NaN(Not a Number): sign: 0/1. exponent: 255(all 1). significand: 非0
非规格化数(denorms)
sign: 对应的正负. exponent: all 0. significand: 对应数
非规格化数的阶固定为-126, 展开公式为:

而规格化数的展开为:

浮点数可表示的数有限, 当数值为不可表示数时, 机器将其转换为最邻近的可表示数
非数值数据
逻辑数据
表示: 用一位表示. N位二进制数可以表示N个逻辑数据. 也是0/1序列
运算: 位运算. e.g.按位与/或, 逻辑左移, 逻辑右移等
识别: 依靠指令识别.
字符
西文
表示: 常用7位ASCII码. 操作: 传送, 比较等
中文
GB2312-80字符集. 码表由94行94列构成, 行号为区号, 列号为位号, 各7位. 编码中, 区号在左, 位号在右.
国标码: 每个汉字编码的区号和位号前各自加上32.
为了处理和存储方便, 在国标码最前面加0, 构成一个字节.
内码: 在GB2312国标码基础上, 在最高位前在加入一位1, 防止与ASCII混淆
多媒体信息
图形、图像、音频、视频等信息在机器内部也用0和1表示
– 图形用构建图形的直线或曲线的坐标点及控制点来描述,而这些坐标点或控制点则用数值数据描述
– 图像用构成图像的点(像素)的亮度、颜色或灰度等信息来描述,这些亮度或颜色等值则用数值数据描述
– 音频信息通过对模拟声音进行采样、量化(用二进制编码)来获得,因此量化后得到的是一个数值数据序列(随时间变化)
– 视频信息描述的是随时间变化的图像(每一幅图像称为一帧)
– 音乐信息(MIDI)通过对演奏的乐器、乐谱等相关的各类信息用0和1进行编码来描述
多媒体信息用一个复杂的数据结构来描述,其中的基本数据或者是数值数据,或者是用0/1编码的非数值数据
数据的基本宽度
计算机处理, 存储, 传输信息的最小单位: 比特(bit, 位)
二进制信息最基本的计量单位: 字节(byte)
- 现代计算机, 存储区按字节编址
- 字节是最小可寻址单位
- 如以字节位一个排列单位, LSB最低有效字节, MSB最高有效字节
字(word), 字与字长不同:
- 字长指数据通路的宽度. 字长”等于CPU内部总线的宽度、运算器的位数、通用寄存器的宽度(这些部件的宽度一致)
- 字表示被处理信息的单位, 用来度量数据类型的宽度
- 字和字长的宽度可以一样, 也可以不同
注: 对于高级语言的数据类型的宽度同类型数据并不是所有机器都采用相同的宽度,分配的字节数随ISA、机器字长和编译器的不同而不同

数据的存储和排列
数据
大端方式(Big Endian): MSB所在地址是数的地址
小端方式(Little Endian): LSB所在地址是数的地址
注: 有些机器两种都支持, 可通过特定控制位来设定采用哪种方式

指令
指令中大小端只需要考虑立即数. 指令从低到高为操作码 地址码 立即数. 操作码和地址码排列顺序固定, 立即数分大小端排列.

转换
存放方式不同的机器间程序移植或数据通信时, 需要进行顺序转换. 音频, 视频和图像等文件格式或处理程序都涉及到字节顺序问题.

浙公网安备 33010602011771号