簡體   English   中英

在c中的if語句中對表達式的求值

[英]evaluation of an expression in an if statement in c

假設我將代碼寫為:

int main()
{
    int i,a=2147483647;

    if((2*a)<0)
        printf("hello");
    else
    printf("world");
}

輸出就是世界。 但對於 :

int main()
{
    int i,a=2147483647;
    if((a+a)<0)
        printf("hello");
    else
        printf("world");
}

輸出是hello

這是怎么回事?
內存中存儲的2 * a和a + a的值在哪里(存儲位置的數據類型是什么?)

如果您的INT_MAX2147483647pow(2, 31) - 1 INT_MAX pow(2, 31) - 1 ),則2*aa+a確實會導致溢出,並且有符號整數算術溢出是C中的未定義行為

引用N1256 6.5表達式:

5如果在表達式的求值過程中發生異常情況 (即,如果未在數學上定義結果或該結果不在其類型的可表示值范圍內),則該行為不確定。

未定義的行為會導致一切 查看編譯器的輸出以了解產生此特定結果的原因。

要知道2*aa+a的值存儲在哪里,還請參見編譯器的輸出。 我想如果您的編譯器足夠聰明,它們應該存儲在寄存器中,而不是內存中。 一些性能差的編譯器可能會將其值存儲在內存中的堆棧中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM