2013-08-12 103 views
-5

我明白爲什麼「回聲!0」返回1.我不明白的是爲什麼echo !!! 0也返回1.請讓我知道我錯過了什麼。當我回聲! 0它給了我一個奇怪的結果

+4

嘗試回聲!!!!! 0位的重複樂趣。 – ciruvan

+2

出於好奇:你爲什麼認爲'!0'產生'1'?因爲如果你正確地理解了這個,'!!! 0'也是'1'的原因應該是非常明顯的。 – deceze

+0

以及我說回聲不錯,所以它返回一個意思是真的所以爲什麼!也返回一個 – user2674150

回答

6

你缺少!運營商,以及0是falsy值:

!0;//oposite of "false" ==> true ==> 1 
!!!0;//oposite of the oposite of the oposite ==> oposite 

當一個布爾值相呼應,它轉化爲它的實際價值(如果有的話)。對於某些事情是真實的,它必須是。所以true1。同樣,對於某些虛假的東西,它不可能如此,所以echo false;顯示爲空字符串,正如deceze指出的那樣。
要說得很清楚,你應該將!!!0想象成對「逆向心理學」的一些幼稚嘗試。

Don't give nothing to me. ~=> Give something to me (Don't + nothing is double negation) 
I'm not Not giving nothing to you. ~=> I'm not giving anything (not + not + nothing is tripple negation) 

底線,假設n!標誌的值的/ var /表達,我們稱之爲e前一個號碼:

if n%2 === 0 
    (n(!)) e === (boolean)e 
if n%2 === 1 
    (n(!)) e === !e 

IF否定運營商的操作數之前的數是甚至,表達式將被評估爲其值,並轉換爲布爾值。如果否定運算符的數目是奇數,則表達式將評估爲其反轉布爾值。
只需將所有!替換爲的對照即可。

+2

'false'實際上是'''',而不是'「0」'當投射到一個字符串。 – deceze

+0

@deceze:yest和'「」「== 0 == false」,但不是「」「=== 0 === false' –

+0

是的,當然;但我不是在談比較規則,我在談論'echo false'!=='「0」'。 – deceze

1

!0等於true;

,當你真正的呼應你1

零本身被認爲是假的:

if (0) // false 
    echo "you won't see this." 

if (!0) // if not 0 means true 
    echo "you see this." 
0

!是邏輯NOT運算符。布爾值改變爲相反值0 < => 1

0 = 0

!0 = 1

!! 0 = 0(第二!更改爲1和第一變化的1成0)

!!! 0 = 1

+1

「Binary」NOT ...?! – deceze

+1

!0實際上並不等於1 –

+0

二進制表示法 – Maks3w

1

由於!是邏輯NOT運算符和0被解釋爲false,你會得到這樣的:

!0 -> true 
!!0 -> !(!0) -> !(true) -> false 
!!!0 -> !(!(!0)) -> !(!(true)) -> !(false) -> true 

當您echo true;時,PHP輸出一個1

+0

你也沒有正確的解釋。如果你把它變成十幾個嬗變,!0反正不會是1。 –

+0

你是對的,[它會是真的](http://php.net/manual/en/language.operators.logical.php)。輸出爲1.但是,如何回答或給出正確的解釋而不是低估每個人? – DarkDust

+1

因爲你提供了錯誤的答案,你得到了一個downvote,這就是爲什麼downvoting在這裏。這不是質量信息。我贊成你,因爲你修復了你的答案。 –

2

它是echo實際上你失敗了,在做一些研究時不要使用這個操作符。
但要使用var_dump(),而不是一個習慣:

var_dump(!0); 

,你將永遠知道真正的價值:

bool(true) 
相關問題