一、数的表示与运算
- 有符号数和无符号数统称为机器数
1.为什么现在用浮点数而不用定点数?
答:
- 编程时需要确定小数点位置
- 难以表示两个大小相差较大的数
- 存储空间利用率低(eg:0.00000005 - 1000000000,花费很大的空间去存储0)
定点数:小数位固定不变的数
浮点数:小数位数可以随意改变的数
- 阶码和尾数都可以正负
- 引入规格化浮点数是为了让每一个小数有唯一的表示方法。(0.35*10^2 == 35 == 3.5 *10,一个数有无数中表示方法)
- 规格化浮点数:3.5*10
2.无符号数
3.有符号数
- 有符号数,无符号数只有程序员知道,计算机硬件无法识别
- 需要判断符号是相同还是相反;若是两个数相减,得先判断哪个绝对值大,然后最终符号位跟上,(这个操作需要花时间)
- -4和8互为补数
- 乘法相当于是移位和加法的结合,除法是移位和减法的运算
- 加减乘除都变成了加法+移位->硬件更加的便宜
- FDH为-3(1000_0011)的补码(1111_1101)
4.数字0的原码,补码,反码问题
- 溢出了,解决了0问题
5.特殊数字(eg:10000000)
- 原码=符号位+绝对值
- 反码:符号位是不变的,求它真实表示的值,需要对它再次取反,即1111_1111=-2^7-1
- 补码这是规定,没有原理
6.数的表示范围
- 有符号数的最小值为1000_0000 = -128
7.溢出判断
-
异或:相同为0不同为1
-
乘法运算没有溢出问题(2个8位相乘结果为16位;2个16位相乘,结果为32位)
-
这是两个有符号数的前提下
-
若是2个无符号数,那么没有溢出(最高位没有向外溢出)
二、逻辑门
-
与非门支持多值输入,即所有为1->结果为0
-
或非门,有一个1->结果为0
-
运用上面的与非110;或非001秒杀
-
同或异或门都是两输入单输出的
-
例1用与非或者或非都可以,但是与非门更好一些(要求全一才输出0;而或非门有一个0就输出0)
-
例2用或门好(全0输出0)