java中的运算符按其功能来分,有算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符和其他运算符。
其中自己不熟悉的有:与(&)、或(|)、非(~)、异或(^),<<,>>,>>>;
&:双目运算符,运算时均把运算数转换为二进制再做比较,规则:当相同的位上均为1时结果为1,否则结 果为0.如:1010&1101,转为二进制:1111110010&10001001101,比较结果为:1000000转为十进制: 64。所以1010&1101=64;
| :当两边 操作数的位有一边为1时,结果为1,否则为0。如1100|1010=1110
~:0变1,1变0
^:两边的位不同时,结果为1,否则为0.如1100^1010=0110
使用instancesof时是(该运算符是双目运算符,左面的操作元是一个对象,右面是一个类或接口。当左面的对象是右面的类(或右边类的子孙类)创建的对象、或者是右边接口的实现类(或实现类的子孙类)的对象时,该运算符运算结果是true,否则是false。),在Android中还有一个isAssignableFrom,是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的超类或接口。
逻辑运算符:
逻辑运算符要求操作数的数据类型为逻辑型,其运算结果也是逻辑型值。
逻辑运算的数据和逻辑运算符的运算结果是boolean类型。
逻辑与'&&',逻辑或'||',逻辑非'!',逻辑异或'^',逻辑与'&',逻辑或'|'
逻辑运算符的真值表:
A和B是逻辑运算的两个逻辑变量;
两种逻辑与(&&和&)的运算规则基本相同,两种逻辑或(||和|)的运算规则也基本相同。
&和|运算是把逻辑表达式全部计算完,而&&和||运算具有短路计算功能。
对于&来说,如果左侧条件为false,也会计算右侧条件的值,而对于&&来说,如果左侧的条件为false,则不计算右侧的条件,这种现象被称作短路现象。
所谓短路计算,是指系统从左至右进行逻辑表达式的计算,一旦出现计算结果已经确定的情况,则计算过程即被终止。
对于&&运算来说,只要运算符左端的值为false,则因无论运算符右端的值为true或为false,其最终结果都为false。
所以,系统一旦判断出&&运算符左端的值为false,则系统将终止其后的计算过程;
对于 || 运算来说,只要运算符左端的值为true,则因无论运算符右端的值为true或为false,其最终结果都为true。
所以,系统一旦判断出|| 运算符左端的值为true,则系统将终止其后的计算过程。
注:异或相同为false,相反则为true。
利用短路现象:
在程序设计时使用&&和||运算符,不建议使用&和|运算符。
位运算符:
位运算是以二进制位为单位进行的运算,其操作数和运算结果都是整型值。
位与'&',位或'|',位非'~',位异或'^',右移'>>',左移'<<',0填充的右移'>>>'
位运算的位与'&',位或'|',位非'~',位异或'^'与逻辑运算的相应操作的真值表完全相同,其差别只是位运算操作的操作数和运算结果都是二进制整数,而逻辑运算相应操作的操作数和运算结果都是逻辑值boolean型。
下边为位&运算:
int a = 15; //x等于二进制数的00001111
int b = 6; //y等于二进制数的00000110
int c = x&y //z等于二进制数的00000110
结果为:二进制数的00000110
右移是将一个二进制数按指定移动的位数向右移位,移掉的被丢弃,左边移进的部分或者补0(当该数为正时),或者补1(当该数为负时)。这是因为整数在机器内部采用补码表示法,正数的符号位为0,负数的符号位为1。
将一个数左移"<<"会使该值乘以2的幂。
将一个数右移>>"会使该值除以2的幂。
右移(补零)运算符,即无符号右移,">>>"永远不会产生负号,因为其符号位总是被补零。 不论被移动数是正数还是负数,左边移进的部分一律补0。
[java] view plain copy
System.out.println(1<<3);
System.out.println(8>>3);
输出为:8
1
int x = 70; //x等于二进制数的01000110
int y = 2;
int z = x>>y //z等于二进制数的00010001
即运算结果为z等于二进制数00010001,即z等于十进制数17。
int x = -70; //x等于二进制数的11000110
int y = 2;
int z = x>>y //z等于二进制数的11101110
即运算结果为z等于二进制数11101110,即z等于十进制数-18。
右移和左移操作,是整数机器数的补码表示法。
&运算符规定必须信号A和B都被充电,其结果才是充电。(1表示充电,0表示未充电)
|运算符规定只要信号A或B被充电,输出结果就是充电。
^异或(XOR)运算符规定如果信号A或B之一被充电,但是信号A和B不是同时被充电,则结果为充电。
~运算符也称为按位求补,它翻转所有的充电状态值。