您的位置:首页 > 其它

位运算的巧妙运用

2016-01-08 17:29 288 查看

1:位运算的符号

与运算:&

或运算:|

异或运算:^

非运算:~

移位运算:>>和<<

1:判断一个数是否是2的N次方

题目要求:用一个表达式,判断一个数x是否是2的N次方,既2,4,8,16....,要求不可以用循环语句:

分析:2,4,8,16这样的数转换成二进制是10,100,1000,10000.

如果x减去1的二进制是01,011,0111,01111.这个时候与x做与运算,答案若为0,则x是2的N次方。

所以答案是:

public static void check2nNum(int num) {
if ((num & (num - 1)) == 0) {
System.out.println("num:" + num + " 2ncifangf");
}
}


2:两个数交换

题目要求:将a,b两个数的值进行交互,并且不使用任何中间变量

方式1:

public static void exchangeAB(int a,int b)
{
System.out.println(String.format("exchange before:a:%d;b%d",a,b));
a=a+b;
b=a-b;
a=a-b;
System.out.println(String.format("exchange after:a:%d;b%d",a,b));
}


方式2:

异或运算:相同为0,相异为1

/**
*  1,3
* @param a
* @param b
*/
public static void exchangeAB2(int a,int b)
{
System.out.println(String.format("exchange before:a:%d;b%d",a,b));
a=a^b;
b=a^b;
a=a^b;
System.out.println(String.format("exchange after:a:%d;b%d",a,b));
}


解释:

如1,3

a=(01^11)=(10)=3;

b=(11^01)=(01)=1;

a=(10^01)=(10)=3;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: