2016-01-01 313 views
-9

假設我得到一個值i=0;
然後將下面的變量leftsmallertrue零是否小於或等於零?

while(i<=0 || arr[i]<arr[j]) 
    leftsmaller = true; 
+3

0 <0的計算結果爲false,但0 = 0因此0 <= 0的結果爲 – amdixon

+2

爲什麼不嘗試使用上面的代碼'i = 0'? – Quill

+0

@ Quill-HATMANIAC只要嘗試一些你不確定的事情,可能會調用UB,所以你不能確定其他編譯器是否做同樣的事情。 –

回答

2

<=(「小於或等於」)運算符返回true如果左手側是小於或等於到右手側。由於0當然等於0,因此該表達式將評估爲true,這將導致代碼輸入while循環,將true指定爲leftsmaller

2

當然零不小於零,但i <= 0變成1,因爲零是小於或等於零。

2

無零不小於零,因此i <= 0變爲1,因爲零小於或等於爲零。

1

變量類型i從未被提及。

如果是unsigned i則測試的< 0部分將失敗。

如果是float i那麼測試的== 0部分可能會失敗 - 即使你能發誓i0,因爲不準確的值可以存儲。

+0

雖然這在技術上是正確的,但在'i = 0;'賦值之後,即使使用浮點變量,測試'i == 0'也總是成立。 –

相關問題