簡體   English   中英

`int sum = n + - + - + - + n`如何編譯`n`是`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.

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