位运算符:&,|,^,~,<<,>>
& (按位与):只有对应的两个二进制位均为1时,结果才为1。例如,9&5,即00001001&00000101=00000001
|(按位或):只要对应的两个二进制位有一个为1,结果就为1,例如9|5,即00001001|00000101=00001101
^(按位异或):两对应的二进制相异时,结果为1
~(求反运算):~9=~(1001)=0110=6
<<(左移运算):把<<左边的运算数个二进制位全部左移若干位,由<<右边的数指定移动的位数,高位丢弃,低位补零。例如a<<4,a=00000011,则a=00001100
位运算符的妙用:
1.判断奇偶性:
if(a&1)
{
System.out.printIn("a为奇数");
}
if(a&1==0)
{
System.out.printIn("a为偶数");
}
解释:奇数的二进制最低位为1,偶数为0,又因为与0相&,结果都为0,所以如果是奇数,结果为00000001,否则为00000000;
2.交换变量值
a=a^b;
b=a^b;
a=a^b;
解释:先令a=a^b,则b=a^b=(a^b)^b=(b^b)^a=0^a,又因为a^0时,a保持不变(0 0时为0,0 1时为1)
3.求整数平均值
int x;
int y;
int avg=(x&y) +((x^y)>>1);
解释:
因为x>>1相当于x/=2,类似的例子还有x<<1相当于x*=2,x>>2相当于x/=4,x<<2相当于x*=4,那么求x,y的整数平均值,使(x+y)>>1不就得了,为什么还要进行(x&y)+((x^y)>>1)这样的操作呢?
posted on 2016-07-29 10:45  惟愿。。。  阅读(193)  评论(0编辑  收藏  举报