当前位置:文档之家› 运算符和表达式

运算符和表达式

static void prt(String s){
System.out.println(s);
}
static void pInt(String s, int i){
prt(s + " = " + i);
}
// shorthand to print a string and a float:
static void pFrt(String s, float f){
(7)算术运算符的操作数必须是数字类型的,不能在布尔型上使用算数运算符,但可以在char类型上使用,是因为Java中的char类型本质上是int型的一个子集;
(8)如果一个表达式中同时包含了几个加法和减法运算,那么操作运算符按照从左到右的顺序求值;
2.3.3关系运算符
关系运算符用来比较两个数据,确定一个操作数与另一个操作数之间的关系,即进行关系运算,关系运算符如表2.9所示。返回布尔类型的值为true或false。若关系是真实的,关系表达式会生成true(真);若关系不真实,则生成false(假)。
1.一元算术运算符
一元算术运算符涉及的操作数只有一个,一个算术表达式是由一个操作数和一个一元算术运算符构成的。一元算术运算符共有四种,如表2.7所示。
表2.7 一元算术运算符
运算符
名称
表达式
功能
+
一元加
+opt1
取正值
-
一元减
-opt1
取负值
++
增量
++opt1
加1
--
减量
--opt1
减1
一元加和一元减运算符仅仅表示某个操作数的符号,其操作结果为该操作数的正值或负值。增量运算符将操作数加1,如对浮点数进行增量操作,则结果为加1.0;减量运算符将操作数减1,如对浮点数进行减量操作,则结果为减1.0。
表2.6 Java运算符的优先级和结合性
优先级
描述
运算符
结合性
1
最高优先级
.、[]、()
左/右
2
单目运算
=、~、!、++、--强制类型转换符

3
算数乘除运算
*、/、!、%

4
算数加减运算
+、-

5
移位运算
>>、<<、>>>

6
大小关系运算
<、<=、>、>=

7
相等关系运算
==、!=

8
按位与,非简洁与
(4)在算术表达式中,如果出现不同类型的数据混合运算时,表达式类型为存储长度最大、精度最高的数据类型;
(5)表达式中有括号的,应先求括号中表达式的操作数的值。因此,括号通常用于按程序员的意愿,强行按某一顺序进行求值。我们认为括号具有“最高的优先级”。在嵌套括号的情况下,由内层向外层求值;
(6)如果一个表达式中包含了几个乘、除和取模运算,那么操作运算按照从左到右的顺序求值。乘、除和取模都在同样的优先级上;
例如,下面的代码中“*”运算符的操作数是x和(y+z):
w=x*(y+z);
计算的顺序规则不是决定何时进行特殊定义的运算,而是决定何时对操作数进行计算。
下面有三个帮助我们记住关于表达式如何被计算的规则:
(1)对于二元运算符,左边的操作数先计算,右边的操作数后计算;
(2)操作数总是在执行运算符定义的运算之前计算出来的;
u /= v; pFrt("u /= v", u);
}
}
输出结果:
j = -8
k = 96
j + k = 88
j - k = -104
k / j = -12
k * j = -768
k % j = 0
j %= k = -8
v = 0.13120472
w = 0.07683301
v + w = 0.20803773
表达式是由标识符、常量、变量和运算符组成,是程序的基本组成部分。
2.3.1优先级、结合性以及单/双目运算
1.优先级、结合性
运算符的优先级决定了表达式中不同运算执行的先后顺序。如关系运算符的优先级要高于逻辑运算符的,x>y&&!z相当于(x>y)&&(!z)。
运算符的结合性决定了并列的相同运算的先后执行顺序。如对于左结合的“+”,a+b+c等价于(a+b)+c;对于右结合的“!”,!!x等价于!(!x)。
(3)如果在方法中调用了多个参数,这些的规则进行计算的。
2.单目/双目运算
运算符指明了对操作数所进行的运算。
运算符按其要求的操作数个数可分为:
单目运算符 如 ++、--
双目运算符 如 +、-、*、/、%
三目运算符 如 ? :
运算符按其功能分为七类:
算术运算符 如 +、-、*、/、%、++、--
表2.8 二元算术运算符
运算符
表达式
名称及功能
+
opt1+opt2

-
opt1-opt2

*
opt1*opt2

/
opt1/opt2

%
opt1%opt2
模数除(求余)
二元算术运算符适用于所有数值型数据类型,包括整型和浮点型。值得注意的是:若操作数全为整型,那么,只要其中有一个为long型,则表达式结果也为long型;其他情况下,即使两个操作数全为byte型或short型,表达式结果也为int型;若操作数为浮点型,则只要其中有一个为double型,表达式结果就为double型,只有两个操作数全是float型或其中一个是float型而另外一个是整型时,表达式结果才是float型。另外还应该注意,当“/”运算和“%”运算中除数为0时,会产生异常。
int a=3;
int b=1;
int c;
c=a++*3;
System.out.println("a="+a);
System.out.println("c="+c);
c=++a*3;
System.out.println("a="+a);
System.out.println("c="+c);
c=a--*3;
i = k * j; pInt("k * j", i);
i = k % j; pInt("k % j", i);
j %= k; pInt("j %= k", j);
// Floating-point number tests:
float u,v,w; // applies to doubles, too
v - w = 0.054371715
v * w = 0.0100808535
v / w = 1.7076609
u += v = 1.8388656
u -= v = 1.7076609
u *= v = 0.22405317
u /= v = 1.7076609
注:由于是利用随机数生成器来产生的数据,所以每次的执行结果不尽相同。
prt(s + " = " + f);
}
public static void main(String[] args){
//创建一个随机数生成器;
// seeds with current time by default:
Random rand = new Random();
int i, j, k;
// '将最大值限制到99;
v = rand.nextFloat();
w = rand.nextFloat();
pFrt("v", v); pFrt("w", w);
u = v + w; pFrt("v + w", u);
u = v - w; pFrt("v - w", u);
u = v * w; pFrt("v * w", u);
3/2=1;3.0/2=1.5;
6%2=0;8%6=2;
与C/C++不同,对取模运算符号“%”来说,其操作数可以为浮点数,例如11.1%10=1.1。
程序2.3 DOption.java
import java.util.*;
public classDOption{
// Create a shorthand to save typing:
u = v / w; pFrt("v / w", u);
//同样适用于char, byte, short, int, long and double类型:
u += v; pFrt("u += v", u);
u -= v; pFrt("u -= v", u);
u *= v; pFrt("u *= v", u);
int x=3;
int y=x++; //y=3 x=4
类似于增量运算,减量操作符(--)是从变量上减1,并且运算符放在变量的左边和右边所得的结果也是不同的。下面是几个单目运算符的例子:
int a1=1,a2=1,a3=1,a4=1;
相关主题