原码:就是我们自己看的,以及机器输出给我们看的
补码:机器永远是以补码的形式将数据保存在计算机中
正数:
原码=反码=补码
负数:
反码:原码的符号位不变,其他位取反 ,1变0 0变1
补码:机器存储数据的方式 等于 反码+1
例子:
96(默认int数据类型):
原码:00000000 00000000 00000000 01100000 共32位
补码:00000000 00000000 00000000 01100000
-96:
原码:10000000 00000000 00000000 01100000 共32位
反码:11111111 11111111 11111111 10011111
补码:11111111 11111111 11111111 10100000
举个例子会更容易对他们加深理解
(-26) ^ 38为多少(^是异或)
1.我们知道我们做运算时得把其数字变作补码
则先把(-26)和38都变为补码
-26:
原码:10000000 00000000 00000000 00011010
反码:11111111 11111111 11111111 11100101
补码:11111111 11111111 11111111 11100110
38:
原码:00000000 00000000 00000000 00100110
补码: 正数的补码=原码
00000000 00000000 00000000 00100110
2.我们得把两个数的补码进行异或运算(位相同为0,不同为1)
11111111 11111111 11111111 11100110
00000000 00000000 00000000 00100110
----------------------------------------------------------
补码: 11111111 11111111 11111111 11000000
3.计算机要让我们看到,得变回反码后变为原码
反码: 补码-1
11111111 11111111 11111111 10111111
原码: 10000000 00000000 00000000 01000000 = -64
最后我们算出(-26) ^ 38结果为-64
我们用电脑验证一下
耶,结果和算的一样
通过这个例子,把负数和正数的原码反码补码关系可以弄清楚,还顺带进行了异或的操作,希望大家能理解。