2014-01-25 105 views
-2

我有一個關於我已經給的任務的問題。描述下面的代碼

- 有兩個整數ab,其值分別爲-1和1。 運行以下代碼和WHY後,ab的值是多少?

if(!++a) 

    b+=a++; 

當我運行這段代碼,我發現了值1和1。我真的不能找出原因,但...即時得到相當混亂在if語句,任何人都可以解釋這對於初學者嘗試學習C?

+1

@Vladp「**當我運行此代碼**」... – 2014-01-25 10:18:58

+0

另外,@OP:讓自己一本很好的C書。答案非常簡單。 '!'是一個邏輯NOT運算符,'++ a'和'a ++'都會減少'a'的值,分別產生已經遞增的和原始的(尚未遞增的)值。 – 2014-01-25 10:19:58

+4

這個問題似乎是無關緊要的,因爲它甚至缺乏對所用語言的最小理解。 – 2014-01-25 10:21:45

回答

0
if (!++a) 

首先,if (a)相同if (a != 0)。奇怪,但真實。零意味着虛假,任何其他數字意味着真實。

if (!a)顛倒了這個意思。

++a增量a並返回新值。 (不像a++,這增加a但返回舊值,而不是新的。)

把所有一起,這是說「增加a和測試的回答是否是零」。如果a = -1,那麼這確實是真的。

通常人們會寫if (...) {do stuff},但如果「do stuff」部分只有一個語句,可以省略括號。我們已經確定在這種情況下條件是成立的,因此運行「b + = a ++」這一行。

如果我們把一些空間,我們有

b += (a++); 

所以,再增加a,但在此之前,它的(舊)值添加到b

0

++a給你增量後的值,所以你得到0這意味着錯誤。 !運營商使其成爲true

那麼你基本上

b = b + a; 
a++; 

所以b仍然1a得到另一個增量和1也結束了。

這裏的主要概念是a++++a之間的區別。如果您使用的是a++,您將首先獲得值a,然後該值遞增,而對於++a,該值首先遞增並返回。

2

你的代碼是等效於此:

int a = -1; 
int b = 1; 

a += 1; 
if (a == 0) { 
    b += a; 
    a += 1; 
} 

你應該明白爲什麼兩個變量都爲1這裏。現在試着弄清楚爲什麼這些代碼是相同的。

0

當你的代碼進入if(!++ a)並且它是預先增量的時候,最初a = -1會發生增量,所以a將變成0,!0變成1,它將進入if塊。

now b + = a ++; 這裏一個++是後增量,所以你可以將這個陳述分爲兩部分。

first b + = a; b + = 0所以b將保持爲1.

秒a ++;一個將成爲1.