有符号数表示方法:原码、反码、补码
表示方法组成:符号位、数值位
正数:三者相同(0001)
负数:
- 原码:符号位为1 (1001)
- 反码:除符号位,取反(1110)
- 补码:反码加1(1111)
原码虽然可以表示正负,但是符号位无法参与运算(计算时要先辨别符号位,再做数值位的加减运算);为了避免计算机再编码一套二进制减法的运算规则,可以通过补码将减法转化为加法运算。减去一个数等于加上这个数的相反数(十进制:负数,二进制:补码)。
1 - 1 -> 1 + -1(负数)
0001 - 1001(原码) -> 0001 + 1111(补码)
在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。
实现原理:计算机二进制运算有位数上限(数值部分),溢出部分直接丢弃(参与符号运算)。
反观十进制减法,虽然有等于加上减数的负数这一概念,但是我们在计算过程中,本质上并没有做什么加法运算,不过是靠着小学时背的减法口诀表做了一次减法运算。整个过程相当于先判断加减,再做运算。当然计算机也可以这么做,不过考虑到效率问题,统一按加法处理了(正好利用了溢出这个缺陷)。
你可以理解为计算机只会加法运算(移位),除法转成减法,减法转成加法,乘法转成加法。