原码是一种计算机中对数字的二进制定点表示方法,原码表示法在数值前面增加了一位符号位,即最高位为符号位,正数该位为0,负数该位为1,其余位表示数值的大小。
补码对正数来说就是原码,对负数来说,补码是原码的反码再加上1。
在计算机系统中,数值一律用补码来表示和存储。
原因在于,使用补码,可以将符号位和数值域统一处理,同时,加法和减法也可以统一处理。
此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
反码是数值存储的一种,多应用于系统环境设置,如linux平台的目录和文件的默认权限的设置umask,就是使用反码原理。
正数的反码与其原码相同,负数的反码是对其原码逐位取反,但符号位除外。
原码:在数值前直接加一符号位的表示法。
对于8位二进制来说:正7原等于00000111,负7原等于10000111,第一位是符号位。
因为第一位是符号位,所以8位二进制数的取值范围就是:11111111到01111111即负127到正127。
反码:正数的反码与原码相同。
负数的反码,符号位为“1”,数值部分按位取反。
正7反等于00000111,负7反等于11111000。
可见如果一个反码表示的是负数,人脑无法直观的看出来它的数值。
通常要将其转换成原码再计算。
补码:正数的补码和原码相同。
负数的补码则是符号位为“1”,数值部分按位取反后再在末位,也就是最低位加1,也就是“反码+1”。
正7补等于00000111,负7补等于11111001。
对于负数,补码表示方式也是人脑无法直观看出其数值的。
通常也需要转换成原码在计算其数值。
原码与补码的转换为:符号位不变,数值位按位取反,末位再加1。
其他转换的方式为:
1.原码转换为反码:符号位不变,数值位分别“按位取反” ;
2.反码转换为原码也是一样:符号位不变,数值位分别“按位取反” ;
3.补码转换为原码:符号位不变,数值位按位取反,末位再加1,即补码的补码等于原码。