版权声明: 未经作者允许,严禁用于商业出版,否则追究法律责任。网络转载请注明出处,这是对原创者的起码的尊重!!!
1 整数
整数在计算机中使用补码表示。
补码:正数的补码=原码;负数的补码=反码+1,如
- [+1]补 = 0000 0001
- [- 1]补 = 1111 1111
补码的作用:
- 一是为了将减法转为加法,[A-B]补=[A]补+[-B]补码,
- 二是统一+0和-0。[+0]补=[-0]补
补码转为原码
- 原码=补码的补码
- 原码= 补码-1的反码
原码:原码就是直接将数转为二进制,对于有符号的数来说,用第一位表示符号,1表示负数,0表示正数。 >其余位表示值。如:
[+1]原 = 0000 0001
[- 1]原 = 1000 0001反码:正数的反码=原码;负数的反码:符号位不变,其他位按位取反。如:
[+1]反 = 0000 0001
[- 1]反 = 1111 1110
2 浮点数
2.1 IEEE规定浮点数在计算机中的表示方法
浮点数在计算机中不是以二进制原码来表示,而是用二进制科学计数法表示
- 将十进制浮点数转为二进制浮点数
将二进制浮点数用规范的二进制科学计数法表示为: ±1.bbbb...∗2i ± 1. b b b b . . . ∗ 2 i
- ±叫做符号位,放在左边第一位。
- bbb…叫做尾数,放在尾数域中,由于规范的二进制科学计数法的第一位都是1,所以省略
- float(4B)中尾数域为占23尾,精度为24位
- double(8B)中尾数域占52尾,精度为53位
- i叫做实际指数,由于指数有正有负,而负数的补码与原码不同,为了解决这个问题,给实际指数i加上一个偏差后放在指数域中
- 对于单精度float类型,指数域有8位,可以表示0~255,实际值为-127~128,其中0和255用于保存特殊值,偏差为127。
- 对于双精度double类型,指数域有11位,可以表示0~2047,实际值为-1023~1024,其中0和2047用于保存特殊值,偏差为1023。
符号域、指数域、尾数域的占位情况
- 对于float类型的数据,其在内存中的表示为:
- 对于double类型,其表示形式如下:
IEEE特殊值规定
- NaN错误
- 实数范围内发生对负数开平方时产生此错误
- 指数域全为1,尾数域不全为0,表示该错误
- 正负无穷大
- 两个大数相乘产生的上溢,IEEE规定此时不是将结果舍入为可以保存的最大的浮点数(因为这个数可能离实际的结果相差太远而毫无意义),而是将其舍入为无穷。
- 指数域全1,尾数域全0,表示该值
- 正负0
- IEEE 标准的浮点数格式中,小数点左侧的1是隐藏的,而零显然需要尾数必须是零。因此零也就无法直接用这种格式表达而只能特殊处理
- 指数域全0,尾数域全0,表示该值
- 非规范化浮点数: ±0.bbbb...∗
- NaN错误