1.3 撰写表达式

三目运算符:

我们写一个小程序的时候,写道cout<<X;在输出内容之后我们想要追加一个空格或者换行符,最终输出哪一个需要看condition Q是否满足,满足则输出空格否则输出换行符。那么如果正常的程序我们会怎么写呢?如果不知道三目运算符那么你们大概率会这么写:
Cout<<X;
if (Q) cout<<" ";
else cout<<"\n";
这写法固然没有错误,但是大家有没有想过,我只是想要判断一下却要写这么多内容,会不会有点冗杂呢?答案是肯定的,幸运的是三目运算符为这提供了便利。如果用三目运算符那上面那三行的内容可以简写为下面这短短的一行:
Cout<<X<< Q ? ' ':\n;
上面这一行都是什么呢,Q之前的自不必说,后面的Q是条件,如果Q为真,那么?后面的语句就会被执行,为假那么:后面的语句会被执行。

OR逻辑运算符和AND逻辑运算符中的短路求值法

OR用 || 两个竖杠表示,AND用&&表示。在我们写程序的时候经常需要判断多个条件都满足之后才执行下面的语句。比如有condition Q,E。我们要求其中有一个条件满足就执行程序,我们可以这么写:
Bool flag = false;
If ( Q ) flag = true;
If ( E ) flag = true;
If ( flag ) {
执行语句;
}
大家会发现还是上面不用三目运算符的那个问题,太冗长了,那怎么解决呢?用OR逻辑运算符。用了之后程序会变成什么样子呢?
If (Q || E){
执行语句;
}
wow,有没有感觉很神奇,这就是OR逻辑运算符所带来的便利。同样的,我们要求Q和E同时满足的时候我们才执行语句,那么不用AND逻辑运算符则需要这么写:
Bool flag = false;
If (Q != true) flag = false;
If (E != true) flag = false;
If (flag){
执行语句;
}
如果用了AND逻辑运算符,则会变成这样:
If (Q && E){
执行语句;
}
这样就简洁了很多。

标题中我们提到了短路求值法。什么是短路求值法呢?简单来说就是:如果前面的条件已经不满足了,那么后面的条件就不进行判断了。
就好比我们要看网课,条件是什么呢?首先你需要有电脑,电脑需要有电力供应,需要有网络等等,我们假设只有这三个条件,我们从前一次判断,用AND逻辑运算符将他们联结在一起。我们在判断你是否有电脑的时候就判断出,你没电脑,那么你想一想后面的条件还有必要判断吗?完全没有!既然这样我们索性就不进行判断了,还节约了时间。
除了节约时间,短路求值法还减少了我们程序出错的可能性。想一下这样一个情景,我们设置了一个大小为20的bool类型数组a,我们判断一个变量n是否小于20,如果小于我们想看看数组a在n这个位置是否为真,如果为真才执行下面的语句。我们用AND运算符就可以上述操作:
If (n <= 20 && a[n] == true){
执行语句;
}
这段代码之所以要先判断n是否小于20,原因在于我们要确保我们不会出现非法访问的情况,因为非法访问一个位置内存,那里面存储的值我们是不知道的,这会给我们的程序带来意想不到的结果,如果没有短路求值法,每个条件都判断一次,那可能就会出现大问题。

运算符的优先级

如果我们在一个语句中有多个运算符,那么他们的执行肯定会有一个先后次序,那就牵扯到运算符优先级的问题。比如说我们想要求 4 * 5 + 2 ,计算机给出的结果是22而不是28,是因为乘法的运算优先级要大于加法的优先级。
具体的次序下表会显示,从上到下优先级依次变低,如果在同一行,那么在语句靠前的运算符优先级更高。
逻辑运算符 NOT
算术运算符 (*,/,%)
算术运算符 (+,-)
关系运算符 (<=,>=,<,>)
关系运算符 (==,!=)
逻辑运算符 AND
逻辑运算符 OR
赋值运算符 =
如果我们就是想要先让优先级较低的运算符优先运算,再让优先级高的运算,我们可以用括号来改变运算符的优先级。还是上面的例子 4 * 5 + 2 ,如果我们的本意是想先让5和2想加在和4相乘,那我们就可以用括号把5 + 2括起来——4 * (5 + 2),这样优先级就会改变,结果就会是28.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,084评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,623评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,450评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,322评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,370评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,274评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,126评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,980评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,414评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,599评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,773评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,470评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,080评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,713评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,852评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,865评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,689评论 2 354