黑马程序员技术交流社区
标题:
原码,反码,补码 数据在计算机中的存储方法
[打印本页]
作者:
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