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

 

 

有时候,我们需要判断几个值是否全部大于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);
}
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值