2.1 十进制数和二进制数&不同进制数之间的转换

  1. 转换的概念在数据上的表示

Alt text

Alt text

  1. 机器级数据分为两大类

    • 数值数据:无符号整数、带符号整数、浮点数(实数)
    • 非数值数据:逻辑数、西文字符和汉字
  2. 计算机内部信息都使用二进制进行编码(冯诺依曼结构规定),原因:

    • 制造两个稳定态的物理器件容易(电位高/低、脉冲有/无、正/负极)
    • 二进制编码、计数和运算规则简单
    • 正好与逻辑命题的真与假对应,便于逻辑运算
    • 方便地用逻辑电路实现算术运算
  3. 真值和机器数

    • 机器数:用0和1编码的计算机内部的二进制数
    • 真值:真正的值
  4. 数值数据表示的三要素

    • 进位计数制(二进制、十六进制、十进制、八进制及其相互转换)
    • 定、浮点表示(定点整数、定点小数、浮点数)
    • 二进制编码(原码、补码、反码、移码)

二进制的表示十分繁琐,所以我们有时会使用十六进制(后缀H,前缀0x)和八进制(后缀O)表示,便于阅读和书写。

  1. 十进制数与R进制数的转换

    • R进制数转十进制数:按“权”展开
    • 十进制数转R进制数:先转二进制,再转其他进制数。整数部分和小数部分分别转换。
    • 整数部分,除基取余,上右下左;小数部分,乘基取整,上左下右(对于整数部分,记住2的0次到16次,小数部分记住0.5,0.25,0.125,0.0625即可)。
  2. 小数点位置的约定

    • 计算机通过约定小数点的位置来表示小数
      • 小数点约定在固定位置的数是定点数
      • 小数点约定在可浮动的数是浮点数
    • 定点小数表示浮点数的尾数部分
    • 定点整数用来表示整数,分带符号整数和无符号整数

Alt text

2.2 原码和移码表示&模运算系统和补码表示&补码和真值的对应关系

定点数的编码(解决正负号问题)

  • 原码、补码、移码、反码(很少用)

原码表示:对于正数用1表示,对于负数用1表示
缺点:

  • 0的表示不唯一
  • 加减运算方式不统一
  • 需要额外对符号位进行处理

移码表示:将每个数值加上一个偏置常数。
用移码来表示指数便于浮点数加减运算时的对阶操作(比较大小)

  • 正数的移码编码值和真值一致
  • 负数的移码编码值在真值的基础上偏移2^(n-1)
  • 由于移码的适用场合,所以不讨论定点小数的移码编码
  • 根据移码的定义 0的移码编码为10000000
  • 移码编码的大小和真值的大小成线性正比关系
  • 移码编码中只有一个0,因此和补码表示数的范围一致

补码表示:在一个模运算系统中,一个数与它除以“模”后的余数等价。

  • 一个负数的补码等于该模减该负数的绝对值
  • 对于某一确定的模,某数减去小于模的另一数,总可以用该数加上另一数负数的补码来代替
    补码表示:2^n + X(-2^n<=X<2^n, mod 2^n)
    正数补码:符号位(sign bit)为0,数值部分不变
    负数补码:符号位为1,数值部分“各位取反,末位加一”(从右向左遇到第一个1的前面各位取反)
    变形补码:双符号,用于存放可能溢出的中间结果

2.3 无符号整数和带符号整数&C语言程序中整数举例

无符号整数(Unsigned integer):机器中字的为排列顺序有两种方式

  • 高到低位从左到右
  • 高到低位从右导左
  • 我们用LSB(Least Significant Bit)来表示最低有效位,MSB表示最高有效位
  • 高到低位一般从左到右
    没有符号位,一般在全部都是正数运算且不出现负值结果的场合下使用(地址运算、编号表示),能表示的最大值大于位数相同的带符号数。因为总是整数,所以有时简称为“无符号数”。

带符号整数(Signed integer):使用MSB表示符号
对于浮点数的尾数来说,我们使用原码的方式表示定点小数
对于浮点数的指数来说,我们使用移码的方式表示定点整数
对于带符号整数来说,我们使用补码方式表示,原因如下:

  • 补码运算系统是模运算系统,加减运算统一
  • 数0的表示唯一,方便使用
  • 比原码多表示一个最小负数

如果同时有无符号和带符号整数,则C编译器将带符号数转成无符号数

Alt text

2.4 浮点数的表示范围&IEEE 754中规格化数的表示&IEEE 754中特殊数的表示

Alt text

Alt text

Alt text

1985年完成了浮点数标准IEEE 754的制定。

Alt text

Alt text

Alt text

Alt text

Alt text

Alt text

2.5 非数值数据的编码表示

逻辑数据的表示:用1位表示
逻辑数据的运算:按位进行。如按位与/按位或/逻辑左移/逻辑右移等。
逻辑数据的识别:逻辑数据和数值数据在形式上并无差别,都是01序列。计算机靠指令进行识别。

西文字符的特点:

  • 是一种拼音文字,用有限几个字母可拼写出所有单词
  • 只需对有限个字母和数学符号、标点符号等辅助字符编码
  • 所有字符总数不超过256个,使用7个或8个二进制位可表示
    西文字符的表示(常用编码为7位ASCII码):
  • 十进制数字
  • 英文字母
  • 专用符号
  • 控制字符
    西文字符的操作:字符串操作,传送/比较等

汉字的特点:

  • 汉字是表意文字,一个字就是一个方块图形
  • 汉字数量巨大,所以给计算机内部的表示,汉字的传输与交换和汉字的输入与输出带来问题。
    汉字的编码形式:
  • 输入码:对汉字用相应按键进行编码表示,用于输入
  • 内码:0和1,用于在系统中进行存储查找和传送
  • 字模点阵或轮廓描述:描述汉字字模点阵或轮廓,用于打印

图形、图像、音频、视频等信息在机器内部也用0和1表示:

  • 图形用构建图形的直线或曲线的坐标点及控制点来描述,而这些坐标点或控制点则用数值数据描述。
  • 图像用构成图像的点(像素)的亮度、颜色或灰度等信息来描述,这些亮度货颜色等值用数值数据描述。
  • 音频信息通过对模拟声音进行采样、量化(用二进制编码)来获得,因此量化后得到的是一个数值数据序列(随时间变化)。
  • 视频信息描述的是随时间变化的图像(每一幅图像称为一帧)。
  • 音乐信息(MIDI)通过对演奏的乐器、乐谱等相关的各类信息用0和1进行编码来描述。

2.6 数据宽度和存储容量的单位

比特(bit,位)是计算机中处理、存储、传输信息的最小单位。
二进制信息最基本的计量单位是“字节”(Byte):

  • 现代计算机中,存储器按字节编址
  • 字节是最小可寻址单位(addressable unit)
  • 如果以字节为一个排列单位,则LSB表示最低有效字节,MSB表示最高有效字节
    除比特和字节外,还经常使用“字”(word)作为单位
  • “字”和“字长”的概念不同
    • “字长”指数据通路的宽度。“字长”等于CPU内部总线的宽度、运算器的位数、通用寄存器的宽度(这些部件的宽度都是一样的)。
    • “字”表示被处理信息的单位,用来度量数据类型的宽度
    • 字和字长的宽度可以一样,也可以不同

数据通路是指CPU内部数据流经的路径以及路径上的部件,主要是CPU内部进行数据运算、存储和传送的部件,这些部件的宽度基本上要一致,才能相互匹配。

2.7 数据存储时的字节排列

Alt text

Alt text