欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

C之邏輯運(yùn)算符(十四)

        我們?cè)?C 語言中經(jīng)常會(huì)遇到邏輯運(yùn)算符。|| 是從左向右開始計(jì)算的,當(dāng)遇到為真的條件時(shí)停止計(jì)算,整個(gè)表達(dá)式為真;所有條件為假時(shí)表達(dá)式才為假。 && 是從左向右開始計(jì)算,當(dāng)遇到為假的條件時(shí)停止計(jì)算,整個(gè)表達(dá)式為假;所有條件為真時(shí)表達(dá)式才為真。

創(chuàng)新互聯(lián)擁有網(wǎng)站維護(hù)技術(shù)和項(xiàng)目管理團(tuán)隊(duì),建立的售前、實(shí)施和售后服務(wù)體系,為客戶提供定制化的成都做網(wǎng)站、成都網(wǎng)站制作、網(wǎng)站維護(hù)、德陽機(jī)房托管解決方案。為客戶網(wǎng)站安全和日常運(yùn)維提供整體管家式外包優(yōu)質(zhì)服務(wù)。我們的網(wǎng)站維護(hù)服務(wù)覆蓋集團(tuán)企業(yè)、上市公司、外企網(wǎng)站、商城網(wǎng)站開發(fā)、政府網(wǎng)站等各類型客戶群體,為全球千余家企業(yè)提供全方位網(wǎng)站維護(hù)、服務(wù)器維護(hù)解決方案。

        我們先來看個(gè)經(jīng)常會(huì)遇到的筆試題,以此代碼進(jìn)行分析

#include <stdio.h>

int main()
{
    int i = 0;
    int j = 0;
    int k = 0;
    
    ++i || ++j && ++k;

    printf("i = %d\n", i);
    printf("j = %d\n", j);
    printf("k = %d\n", k);
    
    return 0;
}

        那么在第 9 行,我們經(jīng)常會(huì)認(rèn)為先執(zhí)行 && 運(yùn)算然后進(jìn)行 || 運(yùn)算。那么我們想著就是先執(zhí)行 ++j && ++k,執(zhí)行完之后 j 和 k 就分別為 1 了,那么整個(gè)表達(dá)式的值也就為真了。++i 就不執(zhí)行了,當(dāng)然 i 就為 0 了,下來我們來看看結(jié)果是否如此

C之邏輯運(yùn)算符(十四)

        結(jié)果剛好跟我們分析的相反。那么我們忽略了一個(gè)問題,那就是程序中的短路。在邏輯表達(dá)式中, && 比 || 具有更高的優(yōu)先級(jí)。在 && 和 || 混合運(yùn)算時(shí),整個(gè)表達(dá)式被看做 || 表達(dá)式,編譯器從左向右開始計(jì)算 && 表達(dá)式,當(dāng)某個(gè) && 表達(dá)式的值為真時(shí),停止計(jì)算,整個(gè)表達(dá)式的值為真。那么我們的第9行可以這樣看:++i || ++j && ++k ==> ++i || (++j && ++k) ==> (true && ++i) || (++j && ++k)。那么這樣分析后,++i 就為 1 了,整個(gè)表達(dá)式的值就為真了。自然也就不會(huì)向后執(zhí)行了,所以結(jié)果應(yīng)該是1、0、0。

        我們?cè)賮砜匆桓缡纠a,比較有迷惑性,代碼如下

#include <stdio.h>

int g = 0;

int f()
{
    printf("In f()...\n");

    return g++;
}

int main()
{
    if( g || f() && f() )
    {
        printf("In if statement: %d\n", g);
    }
    
    printf("In main(): %d\n", g);
    
    return 0;
}

        我們來分析下這個(gè)代碼,第14行表達(dá)式便可以看成 (true && g) || (f() && f()),那么由于 g 為0,前面為假,繼續(xù)向后執(zhí)行。這是便調(diào)用到 f() 了,便會(huì)打印出 In f()... 這條語句,它在內(nèi)部返回的 g++,就是先返回 0 再進(jìn)行++操作。由于 f() 已經(jīng)返回 0 了,所以后面的 && 表達(dá)式為假,因而 main 函數(shù)中的 if 中的打印語句得不到執(zhí)行。但是由于上面已經(jīng) g++ 了,所以這時(shí) g 的值就為 1 啦。我們來看看編譯結(jié)果

C之邏輯運(yùn)算符(十四)

        我們下來來看下這個(gè)運(yùn)算符"!"。C語言中的邏輯非 "!" 只認(rèn)得0,只知道見了0就返回1,其他就都為0。我們來看下示例代碼。

#include <stdio.h>

int main()
{
    printf("%d\n", !0);
    printf("%d\n", !1);
    printf("%d\n", !100);
    printf("%d\n", !-1000);
    
    return 0;
}

        由上面可知,第一個(gè)為1,其他全為0。編譯后結(jié)果如圖

C之邏輯運(yùn)算符(十四)

        結(jié)果也確實(shí)如此。我們今天學(xué)習(xí)了邏輯運(yùn)算符相關(guān)的知識(shí),總結(jié)如下:1、程序中的邏輯表達(dá)式遵從短路規(guī)則;2、在 && 與 || 混合運(yùn)算時(shí):整個(gè)表達(dá)式被看做 || 表達(dá)式;從左向右先計(jì)算 && 表達(dá)式;最后計(jì)算 || 表達(dá)式;3、邏輯非 "!" 運(yùn)算符只認(rèn)得 0 碰見 0 返回 1,否則則返回1。只有 0 才代表假,其余所有值均代表真。后面我們會(huì)繼續(xù)對(duì) C 語言的學(xué)習(xí)。

         歡迎大家一起來學(xué)習(xí) C 語言,可以加我QQ:243343083。

分享標(biāo)題:C之邏輯運(yùn)算符(十四)
網(wǎng)頁鏈接:http://www.chinadenli.net/article28/pecjjp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站App開發(fā)電子商務(wù)響應(yīng)式網(wǎng)站外貿(mào)建站標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作