Opetators (操作符)
一、赋值运算符
- “=” 执行顺序是从右往左
二、算术运算符
-
“+”、“-”、“*”、“/”、“%”、“++”、“–”
-
++a,–a:前缀式,先加减后赋值
-
a++,a–:后缀式,先赋值后加减
-
三、关系运算符(比较运算符)
- “==”、“>”、“>=”、“<”、“<=”、“!=”
四、逻辑运算符
-
“|”、“||” 逻辑或:一个为true则结果为true
- “|”:两个都要运算
- “||” 又称短路运算符:前面为true则后面可不运算;前面为false则后面要运算
-
“&”、“&&” 逻辑与:两个都为true则结果为true
- “&”:两个都要运算
- “&&” 又称短路运算符:前面为false则后面可不运算;前面为true则后面要运算
-
“!” 逻辑非:取反操作,true变false,false变true
-
“^” 逻辑异或:两个逻辑值不同则为true,相同则为false
五、位运算符
-
“>>”:对于正数,向右移位时,高位补0,低位挤掉;对于负数,向右一位时,高位补1,低位挤掉
-
“<<”:不论正负,向左移位时,都是高位挤掉,低位补0
- 巧用:x<<n 看作 x*(2n),如5<<1就是5*(21)=10
-
">>>"无符号右移:向右移位时,无论正负,都是高位补0,低位挤掉
-
“>>”,">>>","<<": 移动的运算数是byte和short类型时,将会自动类型提升为int
-
“|” 按位或:有一个为1则结果为1,例如:0101 | 0111 得到 0111
-
“&” 按位与:两个都为1则结果为1,例如:0101 & 0111 得到 0101
-
“^” 按位异或:两个二进制位不同则为1,相同则为0,例如:0101 ^ 0111 得到 0010
- 巧用:r=rs;s=sr;r=r^s; 可交换r与s变量的值(但对浮点数不起作用)
-
“~” 按位取反:0变1,1变0,包括符号位也会取反
- int x = ~y; "~"为单目运算符
六、特殊赋值运算符
-
与算术运算符有关的
- a+=b; 即为a=a+b;
- a-=b;
- a*=b;
- a/=b;
- a%=b;
-
与位运算中移位有关的
- a>>=b; 即为a=a>>b;
- a>>>=b; 即为a=a>>>b;
- a<<=b; 即为a=a<<b;
-
与其他位运算有关的
- a|=b;
- a&=b;
- a^=b;
- 注意没有a~=b;
七、三目运算符
-
布尔表达式 ? first : second
- 布尔表达式返回结果为true则取first,否则取second
? ( ? : ) : ( ? : )
可以嵌套使用
-
如果期望通过一个变量接受三目运算符结果,则此变量必须类型与 first 和 second 两个值的类型兼容
- 例:
int a = b>c?b:c;
若b为short类型,c为char类型,正确
- 例: