-3
我在某處發現了此問題並無法理解它。這個你能幫我嗎。C中的異常數學運算
#include<stdio.h>
int main(){
char x = 250;
int ans = x + !x + ~x + ++x;
printf("%d", ans);
}
輸出結果爲-6。我不明白編譯器如何執行操作。
在此先感謝!
我在某處發現了此問題並無法理解它。這個你能幫我嗎。C中的異常數學運算
#include<stdio.h>
int main(){
char x = 250;
int ans = x + !x + ~x + ++x;
printf("%d", ans);
}
輸出結果爲-6。我不明白編譯器如何執行操作。
在此先感謝!
當你試圖瞭解這樣的事情,它往往有助於下來把問題分解成更小的碎片,並期待在每一個。我修改程序,使其打印每個值:
#include<stdio.h>
int main(){
char x = 250;
printf("x: %d\n", x);
printf("!x: %d\n", !x);
printf("~x: %d\n", ~x);
printf("++x: %d\n", ++x);
int ans = x + !x + ~x + ++x;
printf("ans: %d\n", ans);
}
和輸出我得到當我運行它是:
x: -6
!x: 0
~x: 5
++x: -5
ans: -5
一旦你瞭解每個部分的手段,它更容易看到它們如何組合成最終結果。然而,我的編譯器還發出警告,因爲++x
在其他地方使用x
相同的表達改變x
,並改變其中的項進行評估將改變最終結果的順序。
這個建議是有幫助的,你的答案給出了操作的混合描述定義的行爲的印象。它沒有(至少不是在不規律地結合時)。 – byxor
如果'char'簽署,注意'250'超出範圍,但可能是'-6'。但沒有序列點的'++ x'使它*未定義行爲*。儘管 –