计算机中的数据
- 计算机中的数据:分为数值数据和非数值数据
- 数值数据:分为无符号数据(如我们的身份证号)和有符号数据(正数和负数)
- 非数值数据:例如文字,图像,声音(如ASCII码)
有符号数据的表示
- 符号:用0,1分别表示正,负号,放在最高位
- 小数点(小数点均不占数位):
定点数:约定小数点隐含在某一位置
浮点数:小数点可以浮动
定点数与浮点数
定点数
即小数点的位置是固定不变的,根据小数点位置分为两种
定点小数
小数点隐含固定在最高数据位的左边,整数位用于表示符号位,用于表示纯小数
定点整数
小数点隐含固定在最低位的右边,最高位用于表示符号位,用于表示纯整数
浮点数
- 小数点的位置由阶码规定,因此是浮动的。用来表示实数。
- 在计算机中通常把浮点数N分成阶码和尾数两部分来表示
- 表示形式:
例如:
- 因为小数点向左移动五位,所以阶码是5,写作2进制即为101
- 在计算机中,约定基数为2,所以浮点数可以写作由阶码和尾数两个整数组成的数
如:
- 一般浮点数在机器中还需要表示阶码符号,尾数符号的符号位 ,即:
示例:
原码
最高位表示数的符号,其他位表示数值
- 最高位:0表示正号,1表示负号
- 如
反码
- 正数的反码和原码相同
- 负数的反码是:其原码的符号位不变,其余位按位取反
- 如
补码
- 正数的补码与原码相同
- 负数的补码是:其原码的符号位不变,其余位按位取反,再在最低位加1(可以这么计算)
- 如
为什么存在原码,反码,补码
首先,当前计算机数据是以补码为存储形式的。
原码就是早期用来表示数字的一种方式,可以直观的展示这个数的大小。但是原码在进行加减运算时,需要将符号位单独判断,不利于计算机运作,于是反码产生了。但是反码存在正负零的问题,于是产生了补码。补码可以很好的解决上述存在的问题,于是现在计算机对数据的存储采用补码的形式。
对补码来说 5-3 跟 5+(-3) 是相同的操作,而这两个式子本来就应该是等价的。所以补码才是最自然而合理的编码。
如果不用补码,就需要对加法和减法,正号跟负号设计若干种不同运算,大幅度降低了计算效率,增加了晶体管复杂度。