C語(yǔ)言中的問(wèn)號(hào)表達(dá)式。
……?……:……
式A?B:C值為:若A為真,則B;若A為假,則C。
但有一點(diǎn)是值得注意的,那就是問(wèn)號(hào)表達(dá)式的結(jié)合性,問(wèn)號(hào)表達(dá)式是從右往左的運(yùn)算方向
尤其是當(dāng)問(wèn)號(hào)表達(dá)式嵌套使用時(shí)得注意這個(gè)問(wèn)題,例如
代碼:
int a=1,b=2,c=3,d=4;
printf("%d",a<b?a:c<d?c:d);
正確結(jié)果是:1
因?yàn)橄葓?zhí)行的是c<d?c:d,會(huì)返回c,然后執(zhí)行a<b?a:c
因此得到的結(jié)果就是1(可以在編譯器上實(shí)驗(yàn)一下)
問(wèn)號(hào)表達(dá)式:
#include<stdio.h>
void main()
{
int a,b,c,d,e;
c=9;
d=8;
scanf("%d,%d",&a,&b);
e=(a>b)?c:d;
printf("%d\n",e);
}
可以理解為,如果a>b則e=c,否則e=d。“=”后整體表達(dá)式可以看做(表達(dá)式1)?(表達(dá)式2):(表達(dá)式3);
逗號(hào)表達(dá)式:
#include<stdio.h>
void main()
{
int a,b,c,d,e;
c=9;
d=8;
scanf("%d,%d",&a,&b);
e=((a=b+c),a+d);
printf("%d\n",e);
}
在問(wèn)號(hào)表達(dá)式基礎(chǔ)上做一下微小的更改得出:
逗號(hào)表達(dá)式的優(yōu)先級(jí)最低,e=((a=b+c),a+d)中先計(jì)算b+c賦值給a,然后計(jì)算a+d賦值給e;這只是一個(gè)最簡(jiǎn)單的逗號(hào)表達(dá)式,還可以在a+d后面繼續(xù)加“,”。
C/C++中問(wèn)號(hào)冒號(hào)表達(dá)式的陷阱
搬運(yùn)自我的百度空間
在做一個(gè)工程,遇到奇怪的bug,問(wèn)題類似如下
int a=1,b=2,c=3,d;
d=a*b + c ? 1: 0;
問(wèn)d結(jié)果是多少?
設(shè)計(jì)時(shí),我想結(jié)果應(yīng)該為3 (1*2+1)
實(shí)際d結(jié)果為1
因?yàn)閱?wèn)號(hào)冒號(hào)表達(dá)式的優(yōu)先級(jí)比較低(三元運(yùn)算符優(yōu)先級(jí)小于二元運(yùn)算符,比如加號(hào)+)
所以實(shí)際運(yùn)行時(shí)d和以下表達(dá)式等價(jià):
d= (a*b + c) ? 1: 0;
而不是我們預(yù)想中的a*b + (c ? 1 : 0)
JAVA問(wèn)號(hào)?運(yùn)算符的用法
*Java提供一個(gè)特別的三元運(yùn)算符(ternary)經(jīng)常用于取代某個(gè)類型的if-then-else 語(yǔ)句。
這個(gè)運(yùn)算符就是?初看起來(lái)有點(diǎn)迷惑
但是一旦掌握了它,用?運(yùn)算符是很方便高效的
*?運(yùn)算符的通用格式如下:
expression1 ? expression2 : expression3
其中,expression1是一個(gè)布爾表達(dá)式。如果expression1為真,那么expression2被求值;
否則,expression3被求值。整個(gè)?表達(dá)式的值就是被求值表達(dá)式(expression2或expression3)的值。
expression2和expression3是除了void以外的任何類型的表達(dá)式,且它們的類型必須相同。
String type =null == "" ? "" : "1";
該例子的type = 1;
因?yàn)閚ull==""為假所以后面表達(dá)式的值為1,
type的值即為1;
下面是一個(gè)利用?運(yùn)算符的例子:
ratio = denom == 0 ? 0 : num / denom;
當(dāng)Java計(jì)算這個(gè)表達(dá)式時(shí),它首先看問(wèn)號(hào)左邊的表達(dá)式。
如果 denom 等于0,那么在問(wèn)號(hào)和冒號(hào)之間的表達(dá)式被求值,并且該值被作為整個(gè)?表達(dá)式的值。
如果 denom 不等于零,那么在冒號(hào)之后的表達(dá)式被求值,并且該值被作為整個(gè)?表達(dá)式的值。然后將整個(gè)?
表達(dá)式的值賦給變量ratio。下面的程序說(shuō)明了?運(yùn)算符,該程序得到一個(gè)變量的絕對(duì)值。
總之,一句話:expression1 ? expression2 : expression3,的用法,如果expression1表達(dá)式的值為真,則取expression2的值,否則取expression3的值
如對(duì)本文有疑問(wèn),請(qǐng)?zhí)峤坏浇涣髡搲瑥V大熱心網(wǎng)友會(huì)為你解答??! 點(diǎn)擊進(jìn)入論壇