原码、反码和补码是计算机中用来表示和存储有符号整数的编码方式。它们是为了解决负数的表示和运算问题而引入的。
原码
最基本的表示方式(即该数的二进制)。一个数有符号位和数值位 两个部分。符号位表示正负,0表示正数,1表示负数。
例如:
14 转化为二进制为00001110,因为14为整数,所以第一位符号位为0表示整数。即原码为00001110
-21转化为二进制为00010101,因为-21为负数,所以第一符号位为1表示负数。即原码为10010101
反码
为了简化加法和减法运算,引入了反码的概念。
正数:原码、反码、补码相同,为原码本身
14(原码):00001110
14(反码):00001110
负数:符号位不变 ,其他取反
-21(原码):10010101
-21(反码):11101010
补码
为了解决反码存在两个零的问题,引入了补码的概念。
补码 = 反码 + 1
-21(原码):10010101
-21(反码):11101010
-21(补码):11101011
补充总结
- 8位二进制数能表示的十进制数范围为-128到+127
- 如果数小于-128或大于127,则会溢出,溢出只能用两个字节,16位二进制数表示了
- 0的补码为0000 0000 , -128的补码为1000 0000
- 计算机中有符号数用补码表示
- 原码首位为符号位