1、数据表示的作用
(1)定义:将数据按照某种方式组织,以便机器硬件能直接识别和使用。现代计算机采用二进制进行数据表示。
(2)数据表示考虑因素:
- 数据的类型: 数值/非数值、小数、整数、英文字符、汉字
- 表示的范围和精度:满足日常计算需要
- 存储和处理的代价:硬件开销,处理性能
- 软件的可移植性:方便在不同机器之间移植
(3)进制转化:
- 二进制转十进制——按权相加法,小数点前2的次方从0 开始,小数点后2的次方从-1开始
- 十进制转二进制——整数部分除基取余法,小数部分乘基取余法
- 二进制、八进制、十六进制:一位八进制对应三位二进制,一位十六进制对应四位二进制
2、数值数据表示
机器数 (解决符号问题)
(1)真值 (书写格式) :将用“+”、“-” 表示正负的二进制数称为真值
(但是机器是识别不来书写格式的,那么在计算机中我们该怎么表示负数?这里就需要引入机器码的概念了)
(2)机器码 (机器内部使用):将符号和数值一起编码表示的二进制数称为机器码
所谓原码,就是二进制的最高位为符号位,1表示负数,0表示正数,其他位为数值位保持不变。 [+89]原 = 01011001 [-77]原 = 11001101 [-0.75]原 = 1.11
所谓反码,如果是正数,则表示方法和原码一样;如果是负数,符号位不变,其余各位取反。 [+89]原 = 01011001 [+89]反 = 01011001
[-77]原 = 11001101 [-77]反 = 10110010
[-0.75]原 = 1.11 [-0.75]反 = 1.00
补码 正值——直接取其原来的二进制码,符号位为0 负值——有三种求法
反码法
逐位取反,末位加1,符号位为1
[-10101010]补 = 1 01010101+1 = 1 01010110
[-0.010101]补 = 1.101011
扫描法 从最右侧开扫描找到第一个1,该数位左侧所有数据位取反,其他数据位不变 模运算 模:符号位进位位的权值 双符号位补码——符号位01表示正溢出,10表示负溢出,最高位表示正确符号位 双符号位最高位永远是正确符号位
移码仅用于表示整数,通常表示浮点数的阶码。
移码=真值+偏移量 [x]移 = 2n+x -2n ≤ x < 2n
- 与补码的符号位相异,数据位相同
- 零有唯一的表示方式[+0000000]移= [-0000000]移= 10000000
- 符号位参与运算
将十进制真值(-127,-1,0,+1,+127)列表表示成二进制数及原码、反码、补码、移码值(机器字长8位,偏移量128)。
| 真值D | 真值B | [x]原 | [x]反 | [x]补 | [x]移 | |--------|--------------|-----------|-----------|-----------|-----------| | -127 | -01111111 | 11111111 | 10000000 | 10000001 | 00000001 | | -1 | -00000001 | 10000001 | 11111110 | 11111111 | 01111111 | | 0 | 00000000 | 10000000 | 11111111 | 00000000 | 10000000 | | +1 | +01111111 | 00000001 | 00000001 | 00000001 | 10000001 | | +127 | +01111111 | 01111111 | 01111111 | 01111111 | 11111111 |
定点表示 (小数点位置固定的数)
定点数表示数的范围受字长限制,表示数的范围有限 定点表示的精度有限
浮点表示(小数点位置随阶码不同而浮动)
机器字长一定时,阶码越长,表示范围越大
浮点数表示范围比定点数大,精度高