一、算术运算符
算术运算符的注意问题:
-
如果对负数取模,可以把模数符号忽略不计,如5%-2=1。但被模数是负数则不可忽略。此外,取模的运算结果不一定是整数
-
对于除号“/”,整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。如:11/20=?
-
对于“+”,除了字符串相加功能外,还能把非字符串转换成字符串。如:Java中:5+5=55
二、比较运算符
a(变量) | b(变量) | a&b(逻辑与) | a&&b(短路与) | a|b(逻辑或) | a||b(短路或) | !a(逻辑非) | a^b(逻辑异或) |
true | true | true | true | true | true | false | false |
true | false | false | false | true | true | false | true |
false | true | false | false | true | true | true | true |
false | false | false | false | false | false | true | false |
算术运算符的细节:
- 逻辑与与短路与的判断方式的区别:
- 逻辑与:从左到右依次判断,直到结尾(逻辑全程运算)
- 短路与:从左到右依次判断,直到出现false为止将不再判断
- 逻辑或与短路或的判断方式的区别:
- 逻辑或:从左到右依次判断,直到结尾(逻辑全程运算)
- 短路或:从左到右依次判断,直到出现true为止将不再判断
- 逻辑异或判断方式:异必真,同必假
三、逻辑运算符
运算符 | 运算 | 举例 |
---|---|---|
== | 相等于 | 1==1(true) |
!= | 不等于 | 1!=2(true) |
< | 小于 | 4<3(false) |
> | 大于 | 4>3(true) |
<= | 小于等于 | 1<=2(true) |
>= | 大于等于 | 1>=2(false) |
instanceof | 检查是否是类的对象 | "HI" instanceof String(true) |
算术运算符的注意问题:
- 比较运算符都是boolean型。
- 运算符“==”是比较两元素,而“=”是赋值。
四、位运算符
运算符 | << | >> | >>> | & | | | ^ | ~ |
运算 | 左移 | 右移 | 无符号右移 | 与运算 | 或运算 | 异或运算 | 取反运算 |
运算 | 举例 |
x<<y(x左移y位,右补0) | 如:5<<1→0101左移1位→1010→10 |
x>>y(x右移y位) | 如:5>>2→0110右移2位→0001→1 |
x&y(x按位与y) | 如:5&4→0101&0100→0100→4 |
x^y(x按位异或y) | 如:5^4→0101^0100→0001→1 |
x|y(x按位或y) | 如:5|4→0101|0100→0101→5 |
~x | 如:~5→00000101取反11111010→再取反+1→-6 |
位运算符地补充说明:
左移运算符号:8<<1→1000左移一位→10000→16
右移运算符:将x右移y位,这需要区分x是有符号数还是无符号数:
在x是无符号数(0或正数)时,只需将x的最右边的y位丢弃,在左边补上y个0。
在x是有符号数(负数)时,x的最右边的y位丢弃,在左边补上y个1。
按位异或运算符:同位只有一个是1,结果为1,否则为0。
按位或运算符:同位至少一个为1,结果为1,否则为0。
按位非运算符:
其公式为:~(a)=-(a+1)
如~(1)=-2。~(-1)=2。
常见的位运算操作技巧:
技巧 | 举例 | 表示方式 |
判断奇偶 | x&1=1,x为奇数,否则为偶数 | x&1 |
最后一位取反 | 1101→1100 | x^1 |
最后一位去掉 | 1101→110 | x>>1 |
最后加一个0 | 1101→11010 | x<<1 |
最后加一个1 | 1101→11011 | (x<<1)+1 |
最后一位变成1 | 1100→1101 | x|1 |
最后一位变成0 | 1101→1100 | (x|1)-1 |
右数第k位变成1 | k=3, 1001→1101 | x|(1<<(k-1)) |
右数第k位变成0 | k=3, 1101→1001 | x&~(1<<(k-1)) |
右数第k位取反 | k=3,100011→100111 | x^ (1<<(k-1)) |
取右数第k位 | k=3,1011→0 | x>>(k-1)&1 |
取末k位 | k=3,1011→11 | x&(1<<k-1) |
末k位取反 | k=3,1011→100 | x^ (1<<k-1) |
末k位变成1 | k=3,1001→1111 | x|(1<<k-1) |
右边连续的1变成0 | 101111→100000 | x&(x+1) |
右边连续的0变成1 | 1000→1111 | x|(x-1) |
右边的第一个0变成1 | 1011→1111 | x|(x+1) |
取右边连续的1 | 1011→11 | (x^(x+1))>>1 |
去掉右边第一个1的左边 | 1010→10 | x&(x^(x-1)) |
五、三元运算符
///(条件表达式)?表达式1:表达式2;
///条件表达式为true,返回表达式1,否则返回表达式2。
三元运算符与if-else的区别:
1.三元运算符可简化为if-else
2.三元运算符必须要返回一个结果
3.if-else有多个语句
六、运算符的优先级
七、参考资料:
1.https://blog.csdn.net/wuguai4/article/details/7311953?utm_source=app&from=singlemessage
2.https://blog.csdn.net/qq_43229543/article/details/104086345?utm_source=app&from=singlemessage