& | ^ ~ >> 和 <<运算符

来源:互联网 发布:js在线压缩混淆 编辑:程序博客网 时间:2024/05/18 03:43

一、按位与运算符(&)
将两个运算的数按照二进制位进行“与”运算。
规则: 0&0=0 0&1=0 1&0=0 1&1=1
两位同时为1结果才为1,,否则为0
注意: 负数按补码的形式参加按位与运算。
补码 = 反码 + 1

与运算的特殊用途:
1. 清零。将一个数的二进制形式与一个各位都为0的数进行与运算,结果为0.
2. 可以取一个数中的指定位。 找一个数Y,对应X要取的位,Y的对应位为1,其余位全为0,把Y与X进行与运算,就可以得到X中的指定位。例如:设X= 1011 0110 取X的低四位,则Y=0000 1111
则X&Y = 0000 0110

二、按位或运算(|)
将两个运算的数按照二进制位进行“或”运算。
规则: 0|0=0 0|1=1 1|0=1 1|1=1
即有1结果为1,全0结果为0
注意:负数以补码形式参加按位或运算
或运算的特殊作用:
对一个数据的某些位置置1: 找一个数Y,对应X中要置1的位,Y中对应的位置为1,其余全部为0,将X与Y进行或运算。例如:X=0000 0001
要将X中前4位置1,则Y=1111 0000,X|Y = 1111 0001

三、异或运算符(^)
将两个运算的数按照二进制位进行“异或”运算。
规则: 0^0=0 0^1=1 1^0=1 1^1=0
即两个数相异结果为1, 相同结果为0
异或运算的特殊作用:
1. 使特定位翻转。找一个数Y,将其对应与X要翻转的位上的数设为1,其余为全为0,把X与Y进行异或运算。例如:设X= 1011 0100 要将X的最后两位0翻转,则Y=0000 0011, X^Y = 1011 0111
2. 一个数与0相异或可以保留原值。

四、取反运算符(~)
将参加运算的一个数据,按照二进制位进行“取反”运算。
规则: ~1=0 ~0=1
使一个数的最低位为0,可以表示为:X&~1
~运算符的优先比算术运算符,关系运算符,逻辑运算符的优先级要高,~1的值为1111 1111 1111 1110,再按位与,则原来的数最低为一定为0。

五、左移运算符(<<)
将一个运算对象的各二进制位全部向左移动若干位(左边的二进制位丢弃,把右边的二进制位补0)。例如:X = 0000 0011。
X<<1得到 0000 0110即6
X<<2得到 0000 1100即12,
由上面的运算可以得出,如果左移的高位不包含1时,每左移一位相当于给该数乘以2.

六、右移运算符(>>)
将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。
例如: 设X = 0000 1110
X>>1得到 0000 0111即7
X>>2得到 0000 0011即3
可以得到:操作数每右移一位,相当于该数除以2。
若X为-14,则X在计算机中是以补码形式存储的。
14的原码是0000 1110 ,取反得到反码 1111 0001,反码加1得到补码
1111 0010。所以X = 1111 0010.
计算X>>2 得到 1111 1100(由于操作数是负数,所以右移左边补1,得到的是补码), 将其减1得到 1111 1011,取反得到 0000 0100即4,所以-14>>2得到的结果是-4.

七、不同长度的数据进行位运算
如果两个不同长度的数据进行位运算,系统会将二者按照右端对齐,然后进行位运算。
例如:long型数据与int型数据进行“与”运算,右端对齐后,左边不足的位根据下面三种情况补足:
1. 整型数据为正数,左边补16个0
2. 整型数据为负数,左边补16个1
3. 整型数据为无符号数,左边补16个0

原创粉丝点击