条件运算符
条件运算符优先级 低于 算术运算符
bool result;
result = 1 + 2 < 1 + 1;
//result = False
不能进行范围比较(python可以),会报错
bool result;
result = 1 < 2 < 3; //error, False无法与3(int)比较
不同数值类型之间,可以随意比较
char可以被转换为数值类型,即可以和同类型比较(只能用==或!=),也可以和数值比较
bool, string只能在同类型之间,用==或!=比较
逻辑运算符
逻辑运算符 优先级 低于 条件运算符
逻辑 低于 条件 低于 ! 低于 算术
1.逻辑与:&&
同真为真,有假则假。
bool result;
result = 1 < 2 && 2 < 3;
//result = True
2.逻辑或:||
同假为假,有真则真。
bool result;
result = 1 > 2 || 2 < 3;
//result = True
3.逻辑非:!
bool result = !1 < 2; //error,系统会先给1取反
bool result = !( 1 < 2 ); //result = False
4.逻辑运算符短路规则
||左边为真,则直接返回“True”,不会运行||右边。若左边为假,则仍然会计算。
&&左边为假,则直接返回“False”,不会运行 &&右边。若左边为真,则仍然会计算。
int i = 0;
bool result = i < 1 || ++i < 1;
//result = True
//i = 0
i = 0;
result = i < 0 && ++i < 2;
//result = False
//i = 0
位运算符
将数值转换为二进制,再进行位运算
多个数值进行位运算时,遵循从左到右的顺序依次计算
1.位与:&
对位运算,有0则0
int i = 1; //001
int j = 5; //101
int k = i & j;
// 001
//&101
// 001
//k = 1
2.位或:|
对位运算,有1则1
int i = 1; //001
int j = 5; //101
int k = 19;
int l = i & j | k;
// 00001
//&00101
//=00001
//|10011
//=10011
//l = 19
3.异或:^
相同为0,不同为1
int i = 1; //001
int j = 5; //101
int k = i ^ j;
// 001
//^101
// 100
//k = 4
4.位取反:~
写在单个数值前,将数值转换为二进制
对位运算,0变1,1变0
注意,前面因为0与0的对位运算永远等于0,不用看完整的每一位
int共32位,取反结果如下,因为涉及反码补码,返回的十进制结果为-20
int i = 19; //10011
int j = ~i;
//~0000 0000 0000 0000 0000 0000 0001 0011
//=1111 1111 1111 1111 1111 1111 1110 1100
//j = -20
5.左移<< 和 右移>>
写在单个数值后,将数值转换成二进制,并进行"移动"
左移几位,右边加几个0,超过int所能储存位数会返回原来的值,甚至报错
右移几位,右边去掉几个数,二进制形式中 移动位数超过原来位数会返回0
int i = 19; //10011
int j = i << 1;
int k = i >> 6;
//j = 38
//k = 0
三目运算符
1.基本语法:
何为三目?:由2个符号分隔开的3个空位
固定语法:空位?空位:空位;
关键信息:bool类型?bool为真时返回内容:为假时返回内容;
三目运算符会有返回值,这个返回值类型必须一致,并且必须使用
2.具体使用:
string i = 1 > 2 ? "条件为真" : "条件为假";
int j = !false? 1 : 0;
//i = "条件为假"
//j = 1