以下都以2进制数进行分析理解:
1,按位与 &
如果(x)i=1并且(y)i=1,那么(x&y)i=1.否则的话,(x&y)i=0;
按位与常用于两种应用:
让某一位或某些位为0:x&0xFE
取一个数中的一段:x&0xFF;
例如:
(1110 0101)&(1101 0111)=(1100 0101);
2.按位或 |
如果(x)i==1或(y)i==1,那么(x|y)i=1,否则(x|y)i=0.
按位或 的两种应用:
使得以为或几位为1:x|0X01
把两个数拼起来:0X00FF|0XFF00
例如:
(1110 0101)|(1101 0111)=(1111 0111)
3.按位取反 ~
把1位变为0,0位变成1;
想得到全部位为1的数:~0
例:
7的二进制是0111,x|7使得低三位为1,而x&~7,就使得低三位为0;
4,按位异或 ^:
如果(x)i==(y)i,那么(x^y)i=0,反之为1;
即如果两个位相等,那么结果为0;不相等,结果为1
对于一个变量用同一个值异或两次,等于什么也没做:
x^y^y----x
逻辑运算VS按位 运算
逻辑运算,只可以看见0和1两个值
可以认为逻辑运算相当于把所有非0值都变成1,然后做按位运算
例如:
5&4——1&1——1
!4——!1——0
左移<<:
i<<j:
i中所有的位向左移动j个位置,而右边填入0;
所有小于Int的类型,移位以Int的方式来做,结果是int
x<<=1等价于x*=2;
x<<=n等价于x*=2的n次方
右移>>:
i>>j;
i中所有位向右移j位;
所有小于Int的类型,移位以Int的方式来做,结果是int
对于unsigned的类型,左边填入0
对于signed的类型,左边填入原来的最高位(保持符号位不变)
x>>=1等价于x/=2;
x>>=n等价于x/=2的n次方