2016-09-21 58 views
1

我有下面的代碼,我不明白表達式a = b!= c的含義是什麼?

shiftLeft = local.tasks.first != NULL; 
if(!shiftLeft) 
    local.tasks.last = NULL; 

我的意思是shiftLeft變量(即布爾值)應該是最後的評估,因此首先評估local.tasks.first!= NULL ,但那是什麼?

+8

'='是賦值運算符。這幾乎是你應該先了解C的第一件事。另外,我認爲你在一個變量中忘記了一個'f',除非你正在做一個非常粗糙的遊戲。 – Cubic

+0

'!='運算符結果有'int'類型,可能是'0'或'1',所以'shiftleft'變成'0'或'1'。 – Sergio

+2

@ M.SChaudhari不,這個問題與這個問題完全沒有關係。 – Cubic

回答

4

這將返回true或false值(取決於事實,如果local.task.firstNULL值或不)。

如果local.task.firstNULL一個shiftLeft變量將得到false值,

如果local.task.first不是NULLshiftLeft變量將得到true值。

什麼是重要的,我們不知道shiftLeft的類型,如果它是一個布爾變量,它將被「填充」truefalse值。如果它是其他類型的變量(例如一個整數),它將被填充爲0,對於false有一些不同於0的真實(但我們無法確定究竟是什麼)。

+0

是布爾值,我在第一篇文章中說過。 – user1797147

+0

但我不明白的是這種三元形式的簡短形式,如shitLeft = local.tasks.first!= NULL? 0:1; – user1797147

+0

@ user1797147,將表達式看作是'a =(b!= c);',它在概念上與'y = x + z'沒有區別。三元運算符'?'沒有涉及,但你通常是正確的;它在邏輯上等同於'a = b!= c? 1:0「,依此類推。 – ray

1

b!= c部分返回布爾型響應(true或false)。然後將結果分配給a

在你的例子中,如果local.tasks.first不爲null,那麼shitLeft(sic)爲true。否則它是錯誤的。

+0

謝謝,感謝。 – user1797147

3

這裏!=表達首先計算因爲!=具有比=更高的優先級,因此它首先用NULL比較,然後分配到shitLeft

如果shitLeft爲真,那麼if條件false,否則if條件true

相關問題