3 回答

TA貢獻1816條經(jīng)驗 獲得超6個贊
請注意,原始版本if(10 < a < 0)完全合法。它只是沒有做您可能(合理地)認為的事情。您很幸運,編譯器將其識別為可能的錯誤并就此警告您。
該<運營商聯(lián)營左到右,就像+操作。因此,正如a + b + c真正的意思(a + b) + c,a < b < c真正的意思(a < b) < c。所述<,如果條件為假,1,如果它是真實的操作者產(chǎn)生的0 int值。因此,您正在測試0小于c還是1小于c。
在不太可能的情況下,這實際上是您想要執(zhí)行的操作,添加括號可能會使警告消失。這還將使以后閱讀您的代碼的任何人都知道您知道自己在做什么,因此他們不會“修復(fù)”它。(同樣,這僅適用于您真正想要的不太可能發(fā)生的事件(a < b) < c)。)
檢查是否a小于b和b小于的方法c是:
a < b && b < c
(有些語言(包括Python)在數(shù)學中通常是a < b < c手段,即手段a<b && b<c,而C恰好不是這些語言之一。)

TA貢獻1876條經(jīng)驗 獲得超7個贊
第一個進行比較,然后將第一個結(jié)果與第二個值進行比較。在這種情況下,操作員組從左到右分組,所以等效于(10<a) < 0。它給出的警告確實是因為<始終會產(chǎn)生0或1。警告是告訴您,第一次比較的結(jié)果永遠不會小于0,因此第二次比較將始終產(chǎn)生false。
即使編譯器不會抱怨它,第二點也沒有太大的改進。一個數(shù)字如何同時小于0但大于10?理想情況下,編譯器會警告您該條件始終為假。想必你想0<a<10和a>0 && a<10。
您可以只使用一個比較就可以得到第二個效果:if ((unsigned)a < 10)僅當數(shù)字在0..10范圍內(nèi)時才為真。通??梢允褂靡韵麓a將范圍比較簡化為單個比較:
if ((unsigned)(x-range_start)<(range_end-range_start))
// in range
else
// out of range.
曾經(jīng)這是體面的匯編語言編程的主要內(nèi)容。我懷疑許多人是否會再做(我當然不這樣做)。

TA貢獻1868條經(jīng)驗 獲得超4個贊
如上所述,您必須拆分支票。從編譯器的角度考慮它,它一次只看一個運算符。10 <a =是或否。然后執(zhí)行True / False <0,這沒有任何意義。
- 3 回答
- 0 關(guān)注
- 473 瀏覽
添加回答
舉報