在了解原码、反码、补码的前提下,先要了解什么是机器数和真值
机器数:
定义:一个数在计算机中的二进制表示形式,叫做这个数的机器数,机器数是带有符号的,最高位存放符号:正数为0,负数为1
例如:+3 的机器数是:00000011
-3 的机器数是:10000011
真值:
定义:机器数的10000011代表的是-3,但实际上计算出来 int(‘10000011‘,2) =131,在这里我们把-3称为真值,把131称作形式值
原码:
定义:原码就是机器数
反码:
定义:正数的反码是其本身;负数的反码是在其原码的基础上, 符号位不变,其余各个位取。
例如:[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
补码:
定义:正数的补码就是其本身;负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
例如:[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补
备注:现在我们知道了一个数有三种编码方式:原码、反码、补码,对于正数而言这三种形式都是一样的,负数则是完全不相同的
为什么要使用原码,反码,补码?
在计算机中是没有减法的,那么计算机时如何实现减法这个功能的呢?是使用补码来计算的,例子如下:
1-1
= 1 + (-1)
= [0000 0001]原 + [1000 0001]原
= [0000 0001]补 + [1111 1111]补
= [0000 0000]补
=[0000 0000]原
=0
备注:使用补码, 就可以很好的处理减法的问题,就不用在为计算机设计复杂的基础电路来实现减法的功能了。
原文:https://www.cnblogs.com/su-sir/p/12465349.html