目录
1.原码反码补码的概念
原码就是一个数的二进制表达。其中对于有符号数,其最高位为符号位,正数为0,负数为1。
对于正数(或无符号数),原码补码反码三者相同。
对于负数,反码是将原码除了符号位外的每一位数取反,0换为1,1换为0;补码是反码+1。
需要注意的是,数据在内存中的存储是以补码的形式进行的,计算的时候也是用补码计算。
2.举例
int a=156
整型为四个字节,32位二进制。
原码为 00000000000000000000000010011100
反码为 00000000000000000000000010011100
补码为 00000000000000000000000010011100
三者相同。
int b=-156
原码为 10000000000000000000000010011010 (负数最高位符号位为1)
反码为 111111111111111111111111111101100101 (除最高的符号位,其他取反)
补码为 111111111111111111111111111101100110 (反码+1)
char c = -56
char类型是1个字节,8个二进制位。
原码为 10111000
反码为 11000111
补码为 11001000
3.计算
int a=28;
int b=-36;
int c=a+b;
a的补码为 00000000000000000000000000011100 √
b的原码为 10000000000000000000000000100100
反码为 111111111111111111111111111111011011
补码为 111111111111111111111111111111011100 √
两补码相加,即得c的补码为
111111111111111111111111111111111000
最高位是1,为负数,转成反码(补码-1)为
111111111111111111111111111111110111
原码为(反码除符号位取反)
10000000000000000000000000001000
得 c = -8 。