您的位置:首页 > 编程语言 > Java开发

Java的位运算符 与(&)、非(~)、或(|)、异或(^) 的某些妙用。

2011-05-11 21:25 381 查看
有时候,我们需要判断几个值是否全部大于0,或者全部小于0,对于刚学编程不久,或许我们会选择逐一判断。

例如:

public boolean checkPositiveInteger(int a,int b,int c){

return (a>0&&b>0&&c>0);

}

咋一看这个程序好像没什么问题,运行起来也很正常,但是,作为程序员的我们必须尽可能地追求完美。

大家都应该知道|是什么意思,从二进制的角度上说,只要在这几个数同样的位上有一个是1,结果就是1。

负数的符号位用1来表示,因此如果一个数是负数那么任何数与这个数进行或(|)运算,都是负数。因此,这个程序可以修改为:

public boolean checkPositiveInteger(int a,int b,int c){

return (a|b|c)>0;

}

如此一来,程序优雅而高效。

同理。大家可以尝试其它运算符得到更多的结论。

我在这里抛砖引玉,给出一些简单的结论:

-1|任何数都得-1(因为-1的补码全部是1)

负数&任何正数都为正数


负数|任何正数都得负数

再附上一个例子,设置闹钟,

//& | ~ ^

public class Clock {

public static void main(String[] args) {

Clock b = new Clock();

b.setClock(5);

b.setClock(4);

b.setClock(3);

b.printClock();

b.cancleClock(5);

b.printClock();

b.cancleClock(3);

b.printClock();

}

int dayClock = 0;

/**

* 给某一天设置闹钟

*

* @param day

*/

public void setClock(int day) {

dayClock |= 1 << day;

}

/**

* 判断某一天是否设置闹钟

*

* @param day

* @return

*/

public boolean isClock(int day) {

int bit = 1 << day;

return (dayClock & bit) == bit;

}

/**

* 取消闹钟

*

* @param day

*/

public void cancleClock(int day) {

if (isClock(day))

dayClock ^= 1 << day;

}

/**

* 打印

*/

public void printClock() {

StringBuilder bif = new StringBuilder();

for (int i = 0; i < 7; i++) {

if (isClock(i)) {

bif.append(i).append(",");

}

}

System.out.println("闹钟设置为:" + bif);

}

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐