Java小技巧之运算符的妙用

来源:互联网 发布:淘宝店铺认证复核失败 编辑:程序博客网 时间:2024/05/17 04:03

运算符中有3个按位运算符,也就:

按位AND 运算符(&),

按位OR 运算符(|),

按位XOR(^,异或)运算符。

大部分情况下,人们总是容易忽略他们。但其实有些时候,如果我们使用恰当,他们便可以给我们编程带来很大的方便。

先来认识一下他们:

 System.out.println(0|0); System.out.println(0|1); System.out.println(1|0); System.out.println(1|1); System.out.println("~~~~"); System.out.println(0&0); System.out.println(0&1); System.out.println(1&0); System.out.println(1&1); System.out.println("~~~~"); System.out.println(0^0); System.out.println(0^1); System.out.println(1^0); System.out.println(1^1); 
运行的结果:
0111~~~~0001~~~~0110

这些,大家都知道。但是怎么用起来呢?

1.有一种用法就是用2进制标记对象的状态。

举个例子,我有一个对象,比如说某控件中设定文字的格式,有字体是否加粗,是否有下划线,文字是否包含数字,是否包含英文,是否包含符号,是否包含中文,等等。

这些信息很简单,就是两个结果true和false。但是传输这些信息或者把这些信息放进数据库的时候,我就会觉得太累赘,这么多字段。

所以这里就有如下一种设计方法:(其实是我在jdk源代码里看到别人有这么写的)

上面共有6种属性,那我就给每个属性一个2进制的数字。每个数字都是以1开头,其余是0,不重复,如下

 public static final int FONT_BOLD =1;//加粗 public static final int FONT_UNDERLINE =2;//下划线 public static final int FONT_NUMBER =4;//能够写数字 public static final int FONT_LETTER =8;//能够写字母 public static final int FONT_FUHAO =16;//能够写符号 public static final int FONT_CHINESE =32;//能够写中文
转成二进制,也就分别是:1=1,10=2,100=4,1000=8,10000=16,100000=32

假如我有这么一个控件,它加粗,没有下划线,只能写数字,字母和符号。那我只要给这个控件设置一个int型的变量

 int style = ClassObj.FONT_BOLD | ClassObj.FONT_NUMBER | ClassObj.FONT_LETTER  | ClassObj.FONT_FUHAO;

也就是二进制的1|100|1000|10000=11101,十进制就=29。

我只要保存一个大小为29的数据,就能替我保存上面6种信息。而且编码也很方便。以后要扩展,只需要继续往后写就可以,不影响扩展,真是一个很巧的解决办法。

很多时候,知道是一回事,用起来又是一回事。希望大家能够把自己了解的一些知识用进自己的项目中去。


2.做逻辑的时候,很多情况下都要先一堆判断,check过了之后才能进入代码处理块。于是就看见类似以下的代码:

 public boolean inPutCheck(){ boolean bo = true; if(check1Function()){ bo = false; } if(check2Function()){ bo = false; } if(check3Function()){ bo = false; } if(check3Function()){ bo = false; } return bo; }

假如check够多,很快复杂度就超了,代码也相对较冗余。于是可以改成下面介个样纸:
 public boolean inPutCheck(){ int bo = 0; bo=bo|check1Function(); bo=bo|check2Function(); bo=bo|check3Function(); bo=bo|check4Function(); return bo==0?true:false; }

注:遇到第一个错误不立刻反回是因为需求上这里需要收集所有的错误返回给前台。这里只是个例子。

可知,true和false在计算机里就是以1位的0和1来保存的,所以,true|false=true;true&false=false;

今天就到这里吧。










原创粉丝点击