java不常用的运算符

来源:互联网 发布:怎么知快怀孕了 编辑:程序博客网 时间:2024/05/21 22:58

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是否相同或是另一个类的超类或接口。 



以下摘自 http://blog.csdn.net/typa01_kk/article/details/45000535

逻辑运算符

逻辑运算符要求操作数的数据类型为逻辑型,其运算结果也是逻辑型值。

逻辑运算的数据和逻辑运算符的运算结果是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 在CODE上查看代码片派生到我的代码片
  1. System.out.println(1<<3);  
  2. 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不是同时被充电,则结果为充电。
~运算符也称为按位求补,它翻转所有的充电状态值。

0 0
原创粉丝点击