简介
在编程中我们需要对一些变量进行运算,比如算术运算、逻辑运算等。cava提供了一系列运算符来支持上述功能,根据运算场景的不同主要分成下面几类:
算术运算符
关系运算符
位运算符
逻辑运算符
赋值运算符
算术运算符
算术运算符主要用于数学计算,它们的含义和数学中的含义相同,下表列出了cava支持的所有运算符。
算术运算符 | 描述 | 示例(int left = 20,right = 10;) |
+ | 加法:操作符两边的操作数相加 | int a = left + right; a结果为30 |
- | 减法:左边的操作数减去右边的操作数 | int a = left - right; a结果为10 |
* | 乘法:操作符两边的操作数相乘 | int a = left * right; a结果为200 |
/ | 除法:左边的操作数除以右边的操作数 | int a = left / right; a结果为2 |
% | 取模:左边的操作数除以右边的操作数的余数 | int a = left % right; a结果为0 |
++ | 自增:操作数自身加一 | int a = left++; a结果为20, left为21 |
— | 自减:操作数自身减一 | int a = left—; a结果为20,left为19 |
说明:除法运算符的右边变量不能为零,否则会触发除零异常。int b = a++; 表示先将a赋值给b,然后a再自增。int b = ++a;表示a先自增,然后再讲自增之后的a赋值给b。
关系运算符
cava中关系运算的结果为布尔(boolean)类型,主要用在if语句中。下表列出了cava支持的关系运算符:
关系运算符 | 描述 | 示例(int left = 20,right = 10;) |
> | 大于:检查左边的操作数是否大于右边的操作数,如果是结果为true,否则为false | boolean a = left > right; a的结果为true |
< | 小于:检查左边的操作数是否小于右边的操作数,如果是结果为true,否则为false | boolean a = left < right; a的结果为false |
>= | 大于等于:检查左边的操作数是否大于或者等于右边的操作数,如果是结果为true,否则为false | boolean a = left >= right; a的结果为true |
<= | 小于等于:检查左边的操作数是否小于或者等于右边的操作数,如果是结果为true,否则为false | boolean a = left <= right; a的结果为false |
== | 等于:检查左边的操作数是否等于右边的操作数,如果是结果为true,否则为false | boolean a = left == right; a的结果为false |
!= | 不等于:检查左边的操作数是否不等于右边的操作数,如果是结果为true,否则为false | boolean a = left != right; a的结果为true |
位运算符
数值在计算机中是通过二进制进行表示的,cava提供了一系列位运算符,支持对int、long、short、char、byte等类型变量在按位进行运算。下表列出了cava支持的位运算符:
位运算符 | 描述 | 示例(int left = 1,right = 2;) |
& | 按位与:两个操作数的某一位都为1时这位才为1 | int a = left & right; a的结果为0 |
| | 按位或:两个操作数的某一位只要有一个不为1时这位就为1 | int a = left | right; a的结果为3 |
^ | 按位异或:两个操作数的某一位不同时这位才为1 | int a = left ^ right; a的结果为3 |
~ | 按位取反:对操作数的每一位取反 | int a = ~left; a的结果为-2 |
<< | 左移:操作数左移指定的位数 | int a = left << 2; a的结果为4 |
>> | 右移:操作室右移指定的位数 | int a = right >> 1; a的结果为1 |
逻辑运算符
cava中的逻辑运算符用于连接布尔型的变量组成更复杂的语句,下表列出了cava中支持的逻辑运算符:
逻辑运算符 | 描述 | 实例(boolean left = true, right = false;) |
&& | 逻辑与:两边的操作数都为true时结果才为true | boolean a = left && right; a的结果为false |
|| | 逻辑或:两边的操作数任何一个为true时,结果就为true | boolean a = left || right; a的结果为true |
! | 逻辑非:取反操作数的逻辑状态,true结果为false,false结果为true | boolean a = !left; a的结果为false |
赋值运算符
赋值运算符用于将一个变量赋值给另一个变量,下表列出了cava中支持的赋值运算符:
赋值运算符 | 描述 | 示例(int left = 1, right = 2;) |
= | 简单赋值:将右边操作数的值赋给左边操作数 | left = right; left结果为2 |
+= | 加和赋值:将左边操作数和右操作数相加后赋给左边操作数 | left += right; left结果为3 |
-= | 减和赋值:将左边操作数和右操作数相减后赋给左边操作数 | left -= right; left结果为-1 |
*= | 乘和赋值:将左边操作数和右操作数相乘后赋给左边操作数 | left *= right; left结果为2 |
/= | 除和赋值:将左边操作数和右操作数相除后赋给左边操作数 | left /= right; left结果为0 |
%= | 取模和赋值:将左边操作数和右操作数取模后赋给左边操作数 | left %= right; left结果为1 |
&= | 按位与赋值:将左边操作数和右操作数按位与后赋给左边操作数 | left &= right; left结果为0 |
|= | 按位或赋值:将左边操作数和右操作数按位或后赋给左边操作数 | left |= right; left结果为3 |
^= | 按位异或赋值:将左边操作数和右操作数按位异或后赋给左边操作数 | left ^= right; left结果为3 |
<<= | 左移赋值:将左边操作数左移右操作数位数后赋给左边操作数 | left <<= right; left结果为4 |
>>= | 右移赋值:将左边操作数右移右操作数位数后赋给左边操作数 | left >>= right; left结果为0 |
条件运算符 (? :)
cava目前暂不支持条件运算符,有相关寻求的用户可以使用if语句进行替代。
运算符的优先级
在编码过程中,我们经常会遇到多个运算符混合使用的情况,下表列出了cava支持的运算符的优先级:
优先级 | 运算符 | 结合性 |
1 | () [] . | 从左向右 |
2 | ! +(正) -(负) ~ ++ — | 从右向左 |
3 | * / % | 从左向右 |
4 | +(加) -(减) | 从左向右 |
5 | << >> | 从左向右 |
6 | < <= > >= | 从左向右 |
7 | == != | 从左向右 |
8 | & | 从左向右 |
9 | ^ | 从左向右 |
10 | | | 从左向右 |
11 | && | 从左向右 |
12 | || | 从左向右 |
13 | = += -= *= /= %= &= |= ^= ~= <<= >>= | 从右向左 |
上表中优是按照优先级从高到低的顺序,也就是优先级为1的最高,优先级14最低。但是在编码过程做我们很难提前预判没一个操作符的优先级,所以最好的办法就是我们通过()为每一个运算符强行指定其运算顺序,比如:
int a = 1;
int b = 2;
int c = a * (b + 2); //通过()强制b+2优先计算