[英]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_MAX
為2147483647
( pow(2, 31) - 1
INT_MAX
pow(2, 31) - 1
),則2*a
和a+a
確實會導致溢出,並且有符號整數算術溢出是C中的未定義行為 。
引用N1256 6.5表達式:
5如果在表達式的求值過程中發生異常情況 (即,如果未在數學上定義結果或該結果不在其類型的可表示值范圍內),則該行為不確定。
未定義的行為會導致一切 。 查看編譯器的輸出以了解產生此特定結果的原因。
要知道2*a
和a+a
的值存儲在哪里,還請參見編譯器的輸出。 我想如果您的編譯器足夠聰明,它們應該存儲在寄存器中,而不是內存中。 一些性能差的編譯器可能會將其值存儲在內存中的堆棧中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.