黑马程序员技术交流社区

标题: 原码,反码,补码 数据在计算机中的存储方法 [打印本页]

作者: flymanshow    时间: 2015-7-20 22:06
标题: 原码,反码,补码 数据在计算机中的存储方法


数据在计算机内部是以补码的形式储存的

数据分为有符号数和无符号数

无符号数都为正数,由十进制直接转换到二进制直接存储(其实也是该十进制的补码)即可。

有符号数用在计算机内部是以补码的形式储存的。

( 正数的最高位是符号位0,负数的最高位是 符号位1。
对于正数:反码==补码==原码。 对于负数:反码==除符号位以外的各位取反。补码=反 码+1)

以二进制的补码存储

正数:三码合一

负数:反码 = 源码取反,补码 = 反码+1, 或者 补码 = 源码取反 + 1,
前提都是符号位不变


正数的首位地址为0,其原码是由十进制数转换到的二进制数字

负数的首位地址为1,其原码后面的位也为10进制数转换过去的二进制数字,都是用补码方式表示 有符号数的。


1)原码
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值.

一个数的绝对值的二进制表示

正数:最高位改0
负数:最高位改1

2)反码
反码的表示方法是:

正数的反码是其本身

负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.


3)补码
补码的表示方法是:

正数的补码就是其本身

负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)



总结

正数三码合一:

负数:
原码负号位不变,其余个位取反

补码:
原码符号位不变,其余各位取饭+1,反码+1

//------------------------------------------------------------------------
1+(-1) = 0

00000000 00000000 00000000 00000001     1 源码
00000000 00000000 00000000 00000001     1 反码
00000000 00000000 00000000 00000001     1 补码



10000000 00000000000000000000000001     -1源码
11111111 11111111 11111111 11111110            -1反码
11111111 11111111 11111111 11111111    - 1补码




00000000 00000000 00000000 00000001                  1的补码
11111111 11111111 11111111 11111111   +        -1的补码
----------------------------------------------------------------------------
00000000 00000000 00000000 00000000        0

1(源码) + (-1)(源码) = -2

1(反码) + (-1)(反码) = -0

1(补码) + (-1)(补码) = 0









欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2