一、原码
原码(true form)是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小。比如+1的原码是以0开头的:0000 0001,反之-1的原码就是以1开头的:1000 0001
第一位是符号位,余下7为是数值为。因为第一位是符号位,所以8位二进制数的取值范围是:[1111 1111,0111 1111]即[-127,127]
原码也是人类最容易理解的和计算的表示方式
二、反码
反码是数值存储的一种,多应用于系统环境设置,如linux平台的目录和文件的默认权限的设置umask,就是使用反码原理。在计算机内,定点数有3种表示法:原码、反码和补码。
正数的反码就是他本身
负数的反码是在其原码的基础上,符号位不变,其余各个位取反
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
可见如果一个反码表示的是负数,人脑无法直观的看出来它的数值,通常要将其转换成原码在计算。
三、补码
计算机中的有符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同 [1] 。在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理 [2]
补码的表示方法是:
正数的补码就是其本身
负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1(即在反码的基础上+1)
[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补
对于负数,补码的表示方式也是人脑无法直观看出其数值的,通常也需要转换成原码在计算其数值
在计算机系统中,数值一律用补码来表示(存储)。主要原因:使用补码,可以讲符号位和其他未统一处理;同时,剑法也可按假发来处理。灵位,两个用补码来表示的数相加时间、,如果最高位(符号位)有进位,则进位被舍弃;补码与原码的转换过程几乎是相同的。