正数的原码、反码、补码一样。负数的反码是原码取反,补码是反码加1。
例:十进制 8 十进制 -8 (第一位是符号位)
原码:01000 11000
反码:01000 10111
补码:01000 11000
引入移码:
计算机内部数的表示是用补码表示的。此时,可以发现比较数的大小并不好比较,因此我们把所有数都加上2^n(n为数的位数),故称移码。
按上边的例子,+1000+2^4 == 11000 > -1000+2^4 == 01000 就可以比较数的大小了。
此时可能有疑问,那小数在计算机中怎么表示的呢?
定点表示与浮点表示:
定点表示不多解释,上图:
浮点表示:
浮点表示实质上是一种科学计数法。改变阶码的运算就是移位运算。
运算篇
加减法:计算机计算加减法时用补码进行计算。直接加减即可。
但是,很可能产生一个问题(进位溢出)
解决方案:
一、一位符号位判断溢出:进位时向符号位进位,当符号位和计算的两个数的符号位不一样即为溢出。(符号不同的两个数是不会溢出的)
二、两位符号位判溢出:正数符号位为00,负数符号位为11,也进行运算。运算后符号位为01或10即为溢出。
乘除:进行原码运算。
乘法:运算后位数变为2倍。先乘高位,乘一次左移一次即可。
除法:恢复余数法:由被除数的原码一次次减去除数的补码即可,每减一次,左移一下。
不恢复余数法:恢复余数法的变形,关系如图。