五月综合缴情婷婷六月,色94色欧美sute亚洲线路二,日韩制服国产精品一区,色噜噜一区二区三区,香港三级午夜理伦三级三

您現(xiàn)在的位置: 365建站網(wǎng) > 365文章 > c和java中問(wèn)號(hào)表達(dá)式與逗號(hào)表達(dá)式問(wèn)題

c和java中問(wèn)號(hào)表達(dá)式與逗號(hào)表達(dá)式問(wèn)題

文章來(lái)源:365jz.com     點(diǎn)擊數(shù):705    更新時(shí)間:2018-06-02 11:51   參與評(píng)論

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);
}

結(jié)果 
可以理解為,如果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ǔ)上做一下微小的更改得出:
  結(jié)果 
逗號(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)入論壇

發(fā)表評(píng)論 (705人查看,0條評(píng)論)
請(qǐng)自覺(jué)遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴(yán)禁發(fā)布色情、暴力、反動(dòng)的言論。
昵稱:
最新評(píng)論
------分隔線----------------------------

其它欄目

· 建站教程
· 365學(xué)習(xí)

業(yè)務(wù)咨詢

· 技術(shù)支持
· 服務(wù)時(shí)間:9:00-18:00
365建站網(wǎng)二維碼

Powered by 365建站網(wǎng) RSS地圖 HTML地圖

copyright © 2013-2024 版權(quán)所有 鄂ICP備17013400號(hào)