本文主要针对的是逻辑运算(&&、||、!)和位运算(&、|、^、~),关于移位预算,现在对开发来说基本不用,就不说了。
逻辑运算主要是针对多个boolean表达式来说的,即a==1&&b==2这种,就是说逻辑运算符左右都是boolean类型的表达式,这里!是个特例,它是一元运算符,只对右边boolean表达式取反,即!ture 变成了false。&&就是左右都为true结果为true,其他为false;||左右有一个是true结果就是true,否则为false。
位运算&、|、^是二元运算,~是一元运算,他们主要是针对整数数据进行按位操作,如1用八位2进制表示是00000001,1&1就是将左边的数字1和右边的数字1八位上的每一位进行布尔代数,然后结果转回来。若两个输入位都是1则&在输出位生成1,否则为0;若两个输入位至少有1个是1则|输出位为1;若两个输入位某一个是1,但不全是1,那^则在输出位就是1;~就是对位取反,因为2进制只有1、0即,~0就是1,~1就是0。
以上都是主要用法,下面说一下注意点。
1、位运算可以和=联合使用:&=,就是按位运算之后赋值,但是~因为是一元运算符不可以和=联合使用。
2、逻辑运算左右一定都是boolean表达式,不接受其他类型数据,而位运算则是对整数进行按位运算,只要有一边数据是float、doulbe都不行,但是char是可以的,并且boolean也是可以的效果和逻辑运算类似,但是~是不能参与boolean类型的运算的。当然位运算与逻辑预算在进行boolean运算时有点区别,就是逻辑预算有“短路”,但是位运算是没有的,即int a = 11, 逻辑运算true&&false&&a-->10 a的结果是11,没有减;而如果是true&false&(a=a-1)>10,则a的结果是10,进行自减运算了。
现在除了jdk里面有些使用了位运算,平常接触到位运算一般不多,而主要是使用逻辑运算。主要是在一些笔试或者面试会被问到。