定点数详解
看笔记一定要心静,慢慢来不急。
定点数解释为小数点固定的数。
我们平常使用的数字大部分都属于定点数。比如1.0;110;192.168等等。这么说可能我们对定点数还是没有什么概念,毕竟没有参照物,那么与定点数不同的就是浮点数了。就我们之前上学接触到的浮点数就是科学计数法了。
这里我们主要介绍定点数,浮点数在之后介绍。
上面我们初步了解定点数的概念,下面我们来看定点数方面的具体内容,,先来看大致几个方面:
其实这个小节我学习之后一直都是稀里糊涂的,什么原码、反码、补码一会儿有符号一会儿无符号给我整的晕头转向的,后来二刷终于搞明白了,无非就几点:
- 无符号数就表示数,有符号数才讨论原码、反码、补码、移码。
- 一看长什么样(怎样表示),二看有多大能耐(表示数值的范围)。
1无符号数(没有小数)
计算机中的数都是用二进制表示,无符号数就是所有数据都表示数值大小不表示正负。(相当于绝对值)
例:(B表示二进制;D表示十进制)
现在我们知道无符号数长什么样了,接下来还有一点,看他的能耐有多大:
假设有8位无符号数,那么它什么时候最小?1111 1111这个时候最小嘛?显然不是,最小的情况应该是全都是0的时候,相对的全都是1的时候是最大的。
可以自己试着总结它的表示范围,假设有10位?9位观察规律可以知道所有无符号数的表示范围。
有符号数
有符号数分为小数和整数,我们知道整数其实就是小数点在数字的后面,也就是说小数点后面没有数据。
定点小数:绝对值都小于1.
我们可以发现,有符号数的最低位(左边)是符号位,0表示正数,1表示负数。
1. 原码
先来看长什么样:
依然用上边例题的数据:1001 1100B,在无符号数情况下它表示156D。
在有符号数情况下我们说第一位是符号位:1001 1100B=-28D,这就是原码,如无特别说明一般都是原码,就像我们平常数字一般都是十进制。
在看它的表示范围:
因为相比无符号数,一位被占用表示符号了,所以8位数据
整数——最小:1111 1111 —— 最大:0111 1111 -----------> 所以有:n+1位数据x -(2^n -1) ≤ x ≤2^n-1
小数——最小:1.111 1111 ——最大:0.111 1111 ------------>所以有:n+1位数据x -(1-2^n ) ≤ x ≤1-2^n
"0"特别注意,1000 0000和0000 0000都表示“0”。
2. 反码
先来看长什么样:
再看它的表示范围:
反码是原码转换补码的中间状态,脱离这个作用就没什么用处了。
3. 补码
先来看长什么样:
自己试着按照上边的规则算一遍,光看又看不出个花来。需要特别注意的是0,原码和反码都有两种表示形式,补码只有一种。
再来看(补码!!)表示范围:
大概一看,我们会想这什么玩意儿。其实很好理解,你看原码和反码是不是都有两个0,他们的(源码和反码!)表示范围都是
没问题吧,那补码不同的地方在哪?就是补码只有一个0,比如A和B都代表0,现在到了补码这里只用A代表0.那么多出来的B干嘛去了?就是在下界那里扩充一位,比如本来范围是-5≤x≤5,现在多出来一位表示-6,所以范围就变成了-6≤x≤5。
4. 移码
先来看长什么样:
- 移码只能用来表示整数。
- 将补码的符号位取反得到移码。
表示范围:
和补码整数相同。
原码、反码、补码、移码。说了这么多,其实要点在于你要会原码转换补码,牢记这几个码之间的转换规则,移码其实是为了在计算机中处理数据方便,不必过度关心,但是相互转换一定要掌握。