逻辑运算符与位运算符
逻辑运算符
1. && 逻辑与
两个条件都为真,则结果为真
if((a>b) && (a<c))
if(b<a<c) //这种表达方式是错误的
2. || 逻辑或
两个条件至少有一个为真,则结果为真
if((a>b) || (a<c))
3. ! 逻辑非
if(!(a>b))
{
}
逻辑与: A && B 只有A 和 B同时为真 整个表达式为真 , 如果A为假 ,不会再判断B的真假(逻辑与的短路特性)
逻辑或: A || B 只有A 和 B同时为假 整个表达式为假 如果A为真,不会再判断B的真假(逻辑或的短路特性)
位运算
按位与:&
1100 0011
1111 0000
-------------------------------------------------------------------------------------------------------
1100 0000
语法:全1为1 其他为0
特点:和1相与 不变 和0相与为0
场景:将固定位 清0
案例:请将num =1100 0011的0、1位清0,其他位不变
1100 0011
1111 1100 &
-------------------------------------------------------------------------------------------------------------------------
1100 0000
num = num & 1111 1100
按位或:|
1100 0011
1111 0000 |
------------------------------------------------------------------------------------------------------
1111 0011
语法:有1为1 全0为0
特点:和0相或 保持不变 和1相或 置1
场景:将固定位 置1
案例:请将num=1100 0011的4、5位置1,其他位不变
1100 0011
0011 0000 |
-------------------------------------------------------------------------------------------------------------------------
1111 0011
num = num | 0011 0000
按位取反:~
语法:0变1 1变0
~(1100 0011) == 0011 1100
按位异或:^
1100 0011
1111 0000 ^
----------------------------------------------------------------------------------------------------
0011 0011
1111 0000 ^
----------------------------------------------------------------------------------------------------
1100 0011
语法:相同位0 不同为1
特点:和0异或 不变 和1异或 取反
场景:将固定的位 发生翻转