本文用来介绍无符号数和有符号数。
计算机中数的表示指的是能够被计算机硬件直接识别和处理的数据, 在计算机中所有的数以补码的形式保存。
本文解决以下几个问题:
- 在计算机中数是怎样被保存起来的?
- 补码形式保存计算机的数有什么优势? 或者说为什么要用补码来保存计算机的数?
1.无符号数
(1)范围:0-255
范围:0-65535
2.有符号数
- 先来区别两个概念: 真值和机器数。
- 真值就是人们一般的数字表达,比如说 -1001, -0001 等等。
- 机器数顾名思义就是在计算机中数字的表达方式, 最明显的区别为了适应计算机只能识别 0 和 1 的特点将符号用 0 或者 1 来表达, 也就是符号数字化的数。表达形式有:原码、 补码、 反码和移码。 你比如上面两个数用表达为机器数中原码就是 1,1001 、 1,0001。
- 注意:无论是 “,” 或者是之后的 “.” 都是人为添加方便人们来查看的, 在计算机中是没有他们的存在, 而是小数点是事先约定的。
3.原码
(1)概念:根据上图我可以看到符号数字化能给出一种机器数的表达方式,这种数称为原码表示法。
(2)表示范围
- 整数:
这个范围最好理解:就是简单的符号数字化的表示。 - 小数:
小数的范围也同样。
(3)原码的优缺点
- 优点:简单, 直观, 符号数字化
- 缺点:
可以看到 0 的表示在原码中不是唯一的, 这给计算机造成了困难。 它的优点也正好是它的第二个缺点:
符号数字化使得 它在用原码做运算的时候加减法会给计算机运算带来很大麻烦, 因为计算机中只有加法器。
4.计算机中加法器的简单介绍
(1)计算机中的三种门电路
- “与” 门:
- “或” 门:
- “非门” :
(2)通过以上 3 种电路组合而成的电路。
- “与非” 门电路:由与门非门组成。
- “异或” 门电路:能实现模为2的加法,因此,异或门可以实现计算机中的二进制加法。
(3)半加法器的实现:
我们来看百度百科的解释:
半加器电路是指对两个输入数据位相加,输出一个结果位和进位,没有进位输入的加法器电路。 是实现两个一位二进制数的加法运算电路。
要想完成高位和低位进位相加需要实现全加法器, 这里不再解释。
我们可以看到, 计算器中只认加法, 所以只用原码这种表示方法肯定不行。 得用一种能够加法来实现减法的数的表示方法。 这就是补码。
5.补码
(1)补码的本质
- 假如现在有一个数, 大小是 4 。 完成下面两个表达式:
4 - 3 :第一种方式当然是直接减, 但我们已经分析过了这种方式在计算机内不能实现。
第二种方式采用补码相加, 让 4 丢掉 3, 我们可以利用计算机的缺点, 因为计算机本身有位数限制, 所以 4 + 13 第 5 位溢出, 丢掉。 就剩下 0001 , 减法完成。
4 - 11 :结果当然是 -7 , 但是计算机内是补码形式 9 。怎么来的呢? 假设计算机自己能够识别正负数, 那么表达范围是 -15-15, 你超过这个数的范围我是表达不出来的, 对应表盘上就是能顺时针的转一圈, 也能逆时针的转一圈。4 - 11就以为着你让我逆时针拨11下, 结果当然是 -7 。 但我们说了, 计算机不会减法。 所以另一种方式就是:你不如让我顺时针拨个 5 结果就成了 9 。那我要是用编程语言输出来, 你不能给我显示个补码吧, 所以还有一位符号位用来区分正负。
补码通俗的理解就是: 把数的范围围成一个圆盘, 我不会逆时针旋转, 我只会顺时针转, 但有办法用顺时针旋转代替逆时针旋转的效果, 也就是补数, 而且我还能记录你是不是用顺时针完成可逆时针的效果(负数)。
(2)补码的定义
(3)求补码的方式:
根据定义求。
数值位取反末尾+1。
(4)关键的几个真值的补码:
6.移码
(1)定义:补码很难判断大小, 所以将真值统一加上2的N次, 放在同一起跑线上比较。
(2)性质:和补码只差一个符号位
(3)作用:通常用来表示浮点数据类型的阶码部分。
划重点
补码运算 | 算术说明 | 情景说明 |
---|---|---|
a+b | a、b均为正数 ,但不超过所要求范围 | 1.a+b没有溢出,正常相加得到结果 2.a+b有溢出,符号位为负数,结果错误 |
a-b | a绝对值大于b | 1.a+(-b补数)绝对有溢出,结果正确且为正数 |
a-b | a绝对值小于b | 1.a+(-b补数)绝对没有溢出,结果正确且为负数 |
-a-b | a、b均为正数,但不超过所要求的范围 | 1.补数相加有溢出,正常相加得到结果 2.补数相加没有溢出,结果错误 |