在考试中,一共有7大类的运算符(operators),如下所示:
下面我们就一一来看每一类的运算符需要注意的考点有哪些。
1. Arithmetic Operators
首先,这里列出的5种算数运算符(arithmetic operators),对int型和double型变量或数值,都是适用的。
加、减、乘、除,这四则运算没有太多需要注意的,注意别出现除数是0的情况就可以了。
求余运算符(%),需要稍微说一说。一般大家可能对自然数之间的求余运算比较熟悉,换成负数和正数,负数和负数之间的求余运算,大家也要明白是怎么回事,在这里,内在逻辑都是一样的。
另外,double型的数值之间也可以进行求余运算,不信你试试。最后,需要提醒大家的是,求余运算 a % b 中的b也不能为零,否则程序运行时,就会出现ArithmeticException。
最后,需要提醒考生:int型数值或变量之间运算的结果仍是int型;double型数值或变量之间运算的结果仍是double型;int型和double型之间进行的运算,结果就是double型了。
2. Increment/Decrement Operators
自增和自减运算符(increment/decrement operators)是对变量进行加1和减1的操作。虽然我们经常针对int型变量使用,但是,double型变量也是可以使用自增、自减运算符的。
在AP CS A Exam中,自增和自减运算符通常出现在变量的后面的,即后置的,比如:
int a = 0;
a++;
在运行完上述代码之后,a的数值就变成了1 。但是,需要特别注意的是,如果你运行如下程序:
int a = 0;
结果显示的是“0”,而不是“1”。原因在于后置的自增和自减运算符如果不是独立出现,变量的值虽然改变了,但是还是会使用之前的数值,这是需要大家特别注意的。在这里,再举一个例子:
int[] arr =
int i = 0;
注意,上述程序运行的结果是1, 而不是2。
最后,我们要说,自增和自减运算符属于一元运算符,即不需要两个数值(或变量)就能进行运算。
3. Assignment Operators
第三类是赋值操作符(assignment operators),在AP CS A Exam中一共有6种。
“=” 是最基本、最常见的一个赋值操作符。“=”会将右边的数值赋给左边的变量。
“=”可以和前面的5种算数运算符结合,结果就会形成新的赋值操作符,即+=,-=, *=, /=,%=这5种赋值操作符,我们可以把它们叫做“增强赋值操作符”或“简洁赋值操作符”,具体功能如下表所示:
注意,增强赋值操作符在表达式中所有其他操作符计算完成之后才执行,比如:
i /= 2 - 3.5 * 2;
等价于
i = i / (2 - 3.5 * 2);
最后,考生需要牢记,在增强赋值操作符之间没有空格,比如:+ = 应该是+=。
4. Relational Operators
考试中会出现的关系运算符(relational operators)一共有6种。关系运算的结果是boolean值,即true或false,如下表所示:
一般来说,关系运算经常出现在if判断的条件之中。
5. Logical Operators
有3种逻辑运算符(logical operators)会出现在考试中,分别是:非(!),与(&&),或(||)。有时候,是否执行一条命令是由几个条件的组合来决定的;这个时候,就可以使用逻辑运算符对这些条件进行组合。逻辑运算符也被称作布尔运算符(boolean operators),因为它是对布尔值进行的运算。
我们将真值表列在下面:
注:非(!)属于一元运算符。
注意,只有当p和q同时为true时,p&&q才会为true;只有当p和q同时为false时,p||q才会为false。
需要大家特别注意的是“逻辑短路”(short-circuit):当在计算p||q的时候,如果p为true,那么q是不会被执行的,比如:
boolean p = true;
boolean q = false;
if (p || (q = true))
上述程序运行结果会显示为“false”,原因在于p的true值已经足够保证该条件为true,所以后半部分的赋值操作(q=true)不会被执行。
同理,下面程序的运行结果会显示为true,因为q的值已经能够确保这个条件的结果,所以,后面的赋值操作也不会被执行。
boolean p = true;
boolean q = false;
if (!(q && (p = false)))
最后,大家需要熟练掌握德摩根定律(De Morgan’s Law):
6. Numeric Casts
数值类型转换(numeric casts)会以两种形式出现在考试中,分别是(int)和(double),它们都是一元运算符。类型转换的语法要求把目标类型放在括号内,紧跟其后的是要转换的变量名或值,比如:
显示结果为1。上述代码就是将double型值转换为int型值,在这个过程中,小数部分会被截去(truncated)。类似的,我们再看下面的代码:
显示结果就是0.25,因为1首先被转换成了double型的数值1.0,然后再去除以4,结果就是一个double型的数值0.25。
我们实际上还可以利用(int)来进行四舍五入:如果x是负数,使用(int)(x-0.5)就可以将x转换成最接近的整数;如果x是正数,使用(int)(x+0.5)就可以将x转换成最接近的整数。
7. String Concatenation
在AP CS A Exam中,将两个字符串相连接,一般使用“+”,比如:
String str = “Hello”;
显示结果就是“Hello SAT小帮手!”。
如果将加号( + )用于连接数字和字符串,执行操作时,就会先将数字转换成对应的字符串,再进行连接,比如:
显示结果就是“Java2018”。
最后,我们来看以上这些运算符/操作符的优先等级。比如,有这样一个表达式:
9 + 2*5 > 3 * (5 - 2) + 1 && (11 - 2 > 7)
它的值应该是多少呢?这就涉及到我们该如何区分运算符的优先级和结合规则。我们先来看优先级:
在上表中,优先级高的运算要先进行,如果表达式中的运算符的优先级相同,那么我们需要根据结合规则来决定它们的执行顺序。在以上所列运算符中,除了赋值操作以外,所有的二元运算符都是左结合的,即从左往右依次进行运算;比如:
i + j - k 等价于 (i + j) - k。
再比如:
显示结果就是2019SAT。因为,在执行括号中的运算的时候,会从左往右进行,所以先进行的是2018 + 1,这是一个整数加法,结果就是2019;然后,2019 + “SAT” 才会被执行,注意,这个时候就不是一个数值加法了,而是一个“String Concatenation”,所以结果就是2019SAT。
如果我们将上述运算顺序修改如下:
显示结果就是SAT20181。
补充说明:
上文及视频中提到的二元运算符的“左结合”,不包括赋值操作,赋值操作是从右往左进行的,举个例子:
int a=1; int b= 2;
a = b = 3;
运行上述代码,显示结果是:
3
3
原因在于:第二行的赋值运算先将 3 赋值给了 b, 所以 b 的值已经变成 3;然后再将 b 的数值赋值给了 a,于是 a 的值也就变为了3。
再举个例子:
int a = 4; int b = 5;
a %= b %= 3;
运行上述代码,显示结果是什么呢?问题留给大家!^_^
如果有任何问题,欢迎来找小起子聊天。
---------
上课时间:2018年4月14日(周六)、15日(周日)、21日(周六)、22日(周日)
09:00-11:00
上课方式:网络直播课,可回看
课时:每次2小时,总计8小时
费用:2400元(参加过AP CS A 课程的老学员8折优惠)
适合学员:有AP CS A课程基础,准备2018年5月份参加AP考试的同学。
讲题范围:2013年至2017年一共5年的Free Response Questions,共计18道大题。
增值服务:给所有报名学员提供两套小帮手原创AP CS A模考选择题,并提供答疑服务。
领取专属 10元无门槛券
私享最新 技术干货