[杂乱笔记]彻底掌握各种运算符(位运算、算术运算、逻辑运算、比较运算)

一、算术运算符

算术运算符的注意问题:

  1. 如果对负数取模,可以把模数符号忽略不计,如5%-2=1。但被模数是负数则不可忽略。此外,取模的运算结果不一定是整数

  2. 对于除号“/”,整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。如:11/20=?

  3. 对于“+”,除了字符串相加功能外,还能把非字符串转换成字符串。如: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→1100x^1
最后一位去掉1101→110x>>1
最后加一个01101→11010x<<1
最后加一个11101→11011(x<<1)+1
最后一位变成11100→1101x|1
最后一位变成01101→1100(x|1)-1
右数第k位变成1k=3, 1001→1101x|(1<<(k-1))
右数第k位变成0k=3, 1101→1001x&~(1<<(k-1))
右数第k位取反k=3,100011→100111x^ (1<<(k-1))
取右数第k位k=3,1011→0x>>(k-1)&1
取末k位k=3,1011→11x&(1<<k-1)
末k位取反k=3,1011→100x^ (1<<k-1)
末k位变成1k=3,1001→1111x|(1<<k-1)
右边连续的1变成0101111→100000x&(x+1)
右边连续的0变成11000→1111x|(x-1)
右边的第一个0变成11011→1111x|(x+1)
取右边连续的11011→11(x^(x+1))>>1
去掉右边第一个1的左边1010→10x&(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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值