数值数据的表示

  • 计算机中的数据表示,包括定点数、浮点数、字符、十进制数的表示方法 ;
  • 原码、补码、反码、移码等码制之间的关系以及各码制之间真值数的转换;
  • 原码求补码的方法
    正数,不变,即原码=补码
    负数,符号位不变,数值为取反并加 1
  • 补码中零只有一个:0.0000000 补码 1.0000000 表示负 1

原码

  • 如果机器字长为 n,那么一个数的原码就是用一个 n 位的二进制数,其中最高位为符号位:正数为 0,负数为 1。剩下的 n-1 位表示该数的绝对值
  • 正数的原、反、补码都一样,0 的原码跟反码都有两个,因为这里 0 被分为+0 和-0。

反码

  • 反码就是在原码的基础上,符号位不变其他位按位取反(就是 0 变 1,1 变 0)就可以了

补码

  • 补码也非常的简单,就是在反码的基础上按照正常的加法运算加 1
  • 负数的补码这么记更简单: ~符号位不变,其他的从低位开始,直到遇见第一个 1 之前,什么都不变;遇见第一个 1 后保留这个 1,以后按位取反~
  • 除此之外,还可以用 [1000_0000]补 表示-128:
    (-1) + (-127) = [1000_0001]原 + [1111_1111]原 = [1111_1111]补 + [1000_0001]补 = [1000_0000]补
    -1-127 的结果应该是-128,在用补码运算的结果中, [1000_0000]补 就代表-128。
    注意,-128 并没有原码和反码表示。

移码

  • 移码最简单了,不管正负数,只要将其补码的符号位取反即可。

数的浮点表示法

阶码决定范围,尾数决定精度。

  • 浮点数的规格化
    为了使浮点表示法有尽可能高的精度,采取的措施之一是增加位数,或者在字长一定的情况下将阶码和尾数所占的位数协调好,措施之二是采用浮点数规格化表示,就是通过调整界面,使其尾数满足以下形式:
    原码规格化后: 正数为 0.1×……× 的形式,负数为 1.1×……× 的形式。
    补码规格化后 : 正数为 0.1×……× 的形式,负数为 1.0×……× 的形式。

非数值数据的表示

  • ASCII 码有 7 位,总共 128 个,最高位区分是否是汉字
  • 区位码(十六进制)+ 2020H = 国标码
  • 机内码 = 国标码 + 8080H
  • 一个汉字占 2 个字节 16 位机内码。

定点加减法运算

溢出判断

  • 双符号位法
  • 进位判断法