Sunset
744 字
4 分钟
条件运算和逗号运算
条件运算和逗号运算
条件运算符(三目运算符)
基本用法
a = (a > 10) ? a++ : a--;由于一口气能处理条件以及两个不同的结果,所以条件运算符是三目运算符,虽然看起来很抽象不好理解,但其实是有据可循的:
用自然语言来描述的话,从左到右依次是变量的名称,括号内是我们要判定的东西,问号则是条件运算符,接下来我们单独理解后面的这一串:
a++ : a--;如果前面的判定为真,也就是a>10,就执行冒号左边的内容,也就是a++,如果a不大于10,则执行冒号右边的内容,也就是a—。
复杂示例
当然,冒号分隔两个情况,两边的情况可以执行很多条件,比如这样:
我们假定一个场景,角色拥有生命值,防御力和法术防御力,敌方的攻击会根据伤害的类型来给角色造成伤害。
int a0 = 10, a1 = 15; // a0就是物理防御,a1就是法术防御int hp = 100;int atk = 10;char c[10];// 假定这里有一个函数用来决定怪物的攻击c = (c == 'yes') ? a0--, hp -= a0 - atk : a1--, hp -= atk * (a1 * 0.01), (int)hp;怪物在攻击角色之后首先降低角色的防御值,角色收到的伤害则是这样判定:物理防御是一比一抵扣,法术防御则是按照百分比抵扣,(int)hp则是转换类型消除小数点后的部分让hp来保持是整数。判定字符c是不是yes就可以实现这样的逻辑,是很实用的东西啦,如果写成一大堆if的话可是很麻烦的事情,而且对内存的占据也比较大。
等价写法
当然,如果还是不好理解的话,我们不妨这样:
count = (count > 20) ? count++ : count--;这个式子其实和下面的这个式子表示的是一个意思:
if(count > 20) { count++;} else { count--;}在程序简单的时候,可以使用条件运算符来减少运算量,但是程序复杂的话,还是老老实实写if不容易出错一点。
优先级
条件运算符的优先级比赋值运算高,但是比所有运算都低。
逗号运算符
基本概念
逗号运算符用来连接两个表达式,以右边的表达式的值作为它的结果。比如:
int a;a = (1 + 2, 3 + 4); // 这样会报错,但是要求括号内的值,会得出7常见应用
通常,逗号运算符常用于if中,用于放多个运算,像是这样:
for(i = 0, j = 10; i < 10; i++)由于=优先级高,所以在循环的开始就变成了既i=0,并且j=10。