1、
原码:将符号位数码化了的数,其中“+”用0表示,“-”用1表示。
反码:正数的反码表示与原码表示一样;负数的反码表示是原码表示的符号位不变,数值位逐位取反。
补码:正数的补码表示与原码表示一样;负数的补码表示是原码表示的符号位不变,数值位逐位取反后最低位加1(反码表示最低位加1)。
例:(假如以八位二进制表示)
[+63] 原=0011 1111 反=0011 1111 补=0011 1111
[-63] 原=1011 1111 反=1100 0000 补=1100 0001
2、负数的位操作(以与为例)
(1)计算机中,无论正数还是负数,都是以其补码形式存储的;
(2)如果位操作后的结果最高位为“1”,说明它是负数的补码,转化为实际的整数时要逆操作,即-1(减一)后保持最高位不变再取反。
(3)一个数(如b)的相反数(-b)的补码,等于该数的补码取反,然后加1。
比如:
-5 原码=1000 0101 反码=1111 1010 补码=1111 1011
5 原码=0000 0101 反码=0000 0101 补码=0000 0101
可以进一步发现,-5 & 5 = 0000 0001,同理 -6 & 6 = 0000 0010,-7 & 7 =0000 0001……
这是一个很有用的性质,即返回(某个数的绝对值,如-6的绝对值是6)的(二进制表示的,6的二进制表示是0000 0110)从右往左第一个为1(第一位为1)的所表示的整数(0000 0010)。