1、原码
原码的组成:符号位(“0”代表正数、“1”代表负数)+数值的绝对值的二进制表示。
原码不能直接参与运算。
以八位二进制数为例:5的原码 = 0000 0101,-5的原码 = 1000 0101
2、反码
正数的反码等于它的原码,负数的反码就是原码符号位除外,其他位按位取反。
以八位二进制数为例:5的反码 = 0000 0101,-5的反码 = 1111 1010
3、补码
正数的补码等于它的原码,负数的补码就是它的反码+1。
在计算机系统中,数值一律用补码来表示和存储。
补码表示统一了符号位和数值位,简化了运算。
以八位二进制数为例:5的补码 = 0000 0101,-5的补码 = 1111 1011
补码的补码等于原码。
位运算符(ps:参与运算的都是补码)
按位与运算符(&)
参与运算的两数各对应的二进位相与,对应的两个二进位都为1,结果位才为1。
按位或运算符(|)
参与运算的两数各对应的二进位相或,对应的两个二进位有一个为1,结果位就为1。
按位异或运算符(^)
对应的两个二进位不同、结果位为1,相同、结果位为0。
按位取反运算符(~)
如果位为0,结果是1,如果位为1,结果为0。
对所有整数取反 = 本身的相反数-1。例:~9 = -10,~-4 = 3
移位运算(ps:参与运算的都是补码)
左移运算符(<<)
运算规则:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃,ps:符号位也会被舍弃),低位的空位补零。
在没有溢出的情况下,m << n 等于 m * 2^n
带符号右移运算符(>>)
运算规则:按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1。
右移一位相当于除2,右移n位相当于除以2的n次方。这里是取商哈,余数就不要了
无符号右移运算符(>>>)
运算规则:按二进制形式把所有的数字向右移动对应位数,低位移出(舍弃),高位的空位补零。对于正数来说和带符号右移相同,对于负数来说不同