Java语法介绍(二):运算符
文章作者 100test 发表时间 2007:03:10 18:40:24
来源 100Test.Com百考试题网
1:优先级
优先级是指同一式子中多个运算符被执行和次序,同一级里的操作符具有相同的优先级,相同优先级得操作符号相遇是,根据结合性决定运算次序,下面从高到低的优先级列出了运算符。同一行中的运算符优先级相同。
. [] () 结合性从左到右
-- ! ~ 结合性从左到右
* / % 结合性从左到右
- 结合性从左到右
<< >> >>> 结合性从左到右
< > <= >= 结合性从左到右
== != 结合性从左到右
&. 结合性从左到右
^ 结合性从左到右
&.&. 结合性从左到右
|| 结合性从左到右
?: 结合性从右到左
= 结合性从右到左
例如对于表达式:a=b c*d/(c^d),因为括号优先级最高,所以先计算c^d,接着是c*d,然后除以c^d,最后,把上述结果与b的和存储到变量a中。
2:整型运算符
整型运算符按操作数的多少可分为一元和二元两类,一元运算符一次对一个变量进行操作,二元运算符一次对两个变量进行操作。对于运算来说,如果有一个变量或操作数是长整型的,那么结果就肯定是长整型的,否则即使操作数还没有确定是字节型、短整型或字符型,运算结果都是整型,下表是一元运算符。
运算符 实际操作 例子
- 改变整型数符号 -i
~ 位运算:非 ~i
加1 i
-- 减1 i--
注:一元取反运算符(-)用来改变整数的正负号,逐位求反把所变量所有是1的位变成0,是0的位变成1,加加和减减(++,--)把变量的值加1或减1。
以下是一个具体例子:
int i=0.
int j=1.
for (i=1.i<10.i )
{
j--.
System.out.println(i "" j "").
}
一元运算符执行的方式是改变它们所作用的变量的值,对一元取反和逐位求反来说,变量的值并不改变,而对加和减运算(++,--)来说,就量的值被改变了,例如:
int i=10,j=10,k=10,l=10.
System.out.println(i "" j "" k "" l "").
j .
i--.
~k.
-l.
System.out.println(i "" j "" k "" l "").
注意:j和i被改变并打印出它们的新值,可是k和l仍然为原来的数值,当在复合表达式中使用一元取反和逐位求余运算时,你实际上是在用一个临时存贮操作数的新值。
++和--既是前置运算符也是后置运算符,这就是说,它们既可以放在操作数前面(++x),也可以放在后面(x++),如果它们被用在复合语句中如:
i=x . 或 i= x.
那么第一个语句中x把值赋给i以后再加1,而第二个语句先把x加1,再把新的x值赋给i。
整型运算符的第二种类型是二元运算符,这种运算并不改变操作数的值,而是返回一个必须赋给变量的值,下表列出了二元运算符。
运算符 实际操作 例子
加运算 a b
- 减运算 a-b
* 乘运算 a*b
/ 除运算 a/b
% 取模运算 a%b
&. 与运算 a&.b
| 或运算 a|b
^ 异或运算 a^b
<< 左移 a< >> 右移 a>>b
>>> 右移 a>>>b
注意:>>与>>>的基本功能都是右移,但>>是用符号位来填充右移后所留下的空位,而>>>则是用零来填充右移后所留下的空位。
还有一类运算,它们形如:j-=i,这里-=是二元运算-和赋值运算=的复合运算,它等价于j=j-i,这种复合方式适用于所有的二元运算符。
这里有几点关于整型运算进一步说明,首先,整数除法向靠近0的方向取整;其次,如果你除以0或者对0取模,程序就会在运行时被强行中止,如果你的运算结果超出最小极限,或者说是下溢,结果将为0,如果超出了最大极限,就将会导致结果的回绕。
3:布尔运算符
另外还有一些运算符能产生布尔类型的结果,我们把它们称为布尔运算符,下表列出了这些运算符。
运算符 实际操作 例子
< 小于 a> 大于 a>b
<= 小于等于 a<=b
> 大于等于 a>=b
== 等于 a==b
!= 不等于 a!=b
在这里要指出的是相等运算符==可能会给你带来许多麻烦,很多人在比较两个值时往往错用了等号=,以致于变成了赋值操作,所以在编程中一定要注意你在比较数值时用的是==。布尔类型本身还有几个逻辑运算符,它们可以对布尔类型的数据进行运算:!,&.&.,//
其实如果你把布尔类型的值true等效地看成1,false看成0,那么对于相同的运算符,整型运算的法则对布尔类型也是适用的。
布尔运算符中还有一种三元运算符,它的格式如下:
Operand ? Statement1:Statement2
在这个式子中,先计算Operand的真假,若为真,则执行Statement1,若为假,则执行Statement2。下面的代码给出了这种运算的一个例子:
(a>b)?a:b.