位运算

要了解位运算首先要补一下原码,补码,反码的概念

原码:

是最简单的机器数表示法。用最高位表示符号位,‘1’表示负号,‘0’表示正号。其他位存放该数的二进制的绝对值。
若以带符号位的四位二进值数为例
1010 : 最高位为‘1’,表示这是一个负数,其他三位为‘010’,计算过来十进制就是-2

反码:

原码最大的问题就在于一个数加上他的相反数不等于零
0001+1001=1010 (1+(-1)=-2) 0010+1010=1100 (2+(-2)=-4)
于是反码的设计思想就是冲着解决这一点,既然一个负数是一个正数的相反数,那我们干脆用一个正数按位取反来表示负数试试。
反码:正数的反码还是等于原码,负数的反码就是他的原码除符号位外,按位取反。
1.3是正数,反码与原码相同,则可以表示为0011
2.-3的原码是1011,符号位保持不变,低三位(011)按位取反得(100)
3.所以-3的反码为1100

补码:

正数的补码等于他的原码
负数的补码等于反码+1。

位运算符 >>>、>>和<<

没有<<<这种运算符,因为左移都是补零,没有正负数的区别
如 -12 的二进制为:1111 1111 1111 1111 1111 1111 1111 0100;
-12 >> 3 即带符号右移3位,结果是:1111 1111 1111 1111 1111 1111 1111 1110,十进制为: -2;
-12 >>> 3 就是右移三位,前面补零,为:0001 1111 1111 1111 1111 1111 1111 1110,十进制为:536870910。
>>:按二进制形式把所有的数字向右移动对应位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1。符号位不变。
>>>:按二进制形式把所有的数字向右移动对应位数,低位移出(舍弃),高位的空位补零

你可能感兴趣的:(位运算)