1.定义、举例
正数的源码、补码、反码一样
负数的反码,符号位不变,其余位对源码取反
负数的补码,符号位不变,其余位对源码取反加1
举例:(八位)1的:
源码:0000 0001 (0x01)
反码:0000 0001 (0x01)
补码:0000 0001 (0x01)
举例:(八位)-1的:
源码:1000 0001 (0x81)
反码:1111 1110 (0xFE)
补码:1111 1111 (0xFF)
2.有符号数和无符号数运算
先将有符号数转换为无符号数(就是补码)再运算。
举例:(32位计算机)
int a = -2;
unsigned int b = 1;
printf("%u",a+b); //4294967295
int和unsigned int都是4个字节,32位,无符号整数最大数为-1;所以a的反码4294967293,补码就是4294967294,所以a+b = 4294967295。