原码、反码、补码是计算机中表示有符号整数的三种方式,它们之间有一定的转换规则,比如原码转反码:如果是正数,不变;如果是负数,除了符号位外,其余位取反;反码转原码:如果是正数,不变;如果是负数,除了符号位外,其余位取反;原码转补码:如果是正数,不变;如果是负数,除了符号位外,其余位取反后加一等。
本文将介绍这三种方式的定义和转换方法,并给出一些例子。
一、什么是原码
原码是最直观的表示方式,就是将一个有符号整数的符号位和数值位按照顺序存储在计算机中。符号位通常是较高位,0表示正数,1表示负数。数值位就是该整数的绝对值的二进制形式。例如,8位二进制数可以表示-127到127之间的整数,其中00000000表示0,00000001表示1,01111111表示127,10000000表示-0,10000001表示-1,11111111表示-127。
二、什么是反码
反码是对原码进行按位取反的操作,但是符号位不变。也就是说,正数的反码和原码相同,负数的反码是除了符号位之外的其他位取反。例如,8位二进制数的反码表示如下:
00000000(原码) -> 00000000(反码)
00000001(原码) -> 00000001(反码)
01111111(原码) -> 01111111(反码)
10000000(原码) -> 11111111(反码)
10000001(原码) -> 11111110(反码)
11111111(原码) -> 10000000(反码)
三、什么是补码
补码是在反码的基础上加1的结果,也就是说,正数的补码和原码相同,负数的补码是在其反码的最低位加1。例如,8位二进制数的补码表示如下:
00000000(原码) -> 00000000(补码)
00000001(原码) -> 00000001(补码)
01111111(原码) -> 01111111(补码)
10000000(原码) -> 10000000(补码)
10000001(原码) -> 11111111(补码)
11111111(原码) -> 10000001(补码)