![](/img/trans.png)
[英]Is `N.0 == N && (int)N.0 == N` true where `N` is an integer literal in the range of int?
[英]How does `int sum = n + - + - + - + n` compile where `n` is an `int`?
今天下午,我真的不知道我在操作員和C上做了什么。最后,我寫了一些我認為無法編譯的代碼,但我不知道它是如何工作的。
代碼是:
#include <stdio.h>
int main()
{
int n=2;
int sum = n + - + - + - + n; /* This line */
printf("%d\n", sum);
return 0;
}
輸出是:
0
我完全混淆了代碼編譯方式以及場景背后發生的事情。
線如何int sum = n + - + - + - + n;
工作?
除了第一個之外的所有人都只是一元運營商 。
n + - + - + - + n
相當於
n + (-(+(-(+(-(+n))))))
這反過來簡直等於
n + (-n)
在解決了所有一元運算符之后。
-n
當然是普通的否定; +n
基本上沒有任何東西(盡管它具有強制整體推廣的副作用)。
int sum = n + - + - + - + n;
/* b u u u u u u */
/* Order: 7 6 5 4 3 2 1 */
相當於:
n + (-(+(-(+(-(+n))))));
或者只是n + (-n)
請注意,一元運算符綁定比C opeartor precedance table
二元運算符更緊密,並且一元運算符+-
關聯性從右到左,而二元+-
運算符從左到右。
+
和-
都是一元運算符。 的結果+n
是的(促進)值n
。 -n
的結果是(提升的) n
的否定。
n + - + - + - + n;
相當於:
n + (-(+(-(+(-(+n))))))
假設沒有發生溢出,這基本上是n + (-n)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.