我们在求原码反码补码的问题用二进制转换来求。
原码
计算机源代码的最终目的是将人类可读的文本翻译成为计算机可以执行的二进制指令。
举例:
int类型的数字10=(1*2^3) +(0 * 2^2)+(1 * 2^1 )+ (0 * 2^0),
它的原码是:
00000000 00000000 00000000 00001010
因为int类型在java中为4字节,它有32位。第一位为符号位。
正数的符号位为’0’;复数的符号位为’1’。
所以int类型的数字-10,它的源码是:
10000000 00000000 00000000 00001010
反码
反码通常是用来由原码求补码或者由补码求原码的过渡码。
正数的反码和源码相同,负数的反码除符号位外其余各位按位取反。
举例:
10的反码是:
00000000 00000000 00000000 00001010
-10的反码是:
11111111 11111111 11111111 11110101
补码
在计算机中,数值一律用补码来表示和存储。
整数的源码,反码,补码都相同;复数的补码等于将其原码除符号位外的所有位取反后+1
同一个数字在不同的补码表示形式中是不同的。
比如-128的补码:
在8位二进制中表示:10000000
在16位二进制中表示:11111111 1000000