位运算是将数据先转换为补码形式,再逐位(bit)按规则运算
位运算包括“按位与”(运算符“&”)“按位或”(运算符“|”)“按位非”(运算符“~”)“按位异或”(运算符“^”)
“按位与” 运算符“&” --全1为1,否则为0
a 000000110
b &000111111
c 000000110
“按位或” 运算符“ |” -- 规则“全为0则0,否则为1”
a 0000 1011
b “|” 0000 1100
c 00001111
“按位非” 运算符“~”--规则“遇0则1,遇1则0”
a 0000 1101
b“|” 1111 0010
“按位异或”运算符“^” --运算规则“相同为0,否则为1”
a 0000 1101
b^ 0000 0101
c 0000 1000
注意:按位异或(^)可逆
a^b^b=a;
逻辑运算符:
运算符 | 用法 | 含义 |
---|---|---|
&& | op1&&op2 | 逻辑与 |
|| | op1||op2 |
逻辑或
|
! | !op | 逻辑非 |
逻辑运算符规则:
逻辑与 op1&&op2 全真则真,否者为假
逻辑或 op1||op2 全假为假,否则为真
逻辑非 !op 变真为假,变假为真
逻辑运算符与位运算符的区别
1、逻辑运算符只能针对Boolean进行逻辑运算,而位运算还可以对数值进行逻辑运算
2、逻辑运算符有短路情况,位运算不会
比如:
if((a=20)==20)||(b=20)==20) System.out.println("b=",b);
if((a=20)==0|(b=20)==0) System.out.println("b=",b)
上边的代码中,由于(a=20)==20为真,逻辑或运算停止,b为0
而下面的代码中,由于是按位或,所以首先计算两边的值,即true|true,结果为1,b为20
y
以上就是逻辑运算符与位运算符的差异