在java和js中的求值結果都為5,而PHP中卻為4是不是因為我這個式子寫的不太規範?還是其他原因,求解又讓別人用.net和c語言試了試都是5【已解決】謝謝各位解答,我猜測的就是式子寫的不太規範,因為我一直覺得三元是從右往左的,所以最後的括號我省略了(以前也常這樣寫),會改正,為了規範,應該是3<8?(9<6?7:5):(2>0 ?4:1)
三元運算子結合方向的問題: java 從右向左。等效於30?4:1)php 從做向右。等效於(30?4:1
30?4:1)
(30?4:1
因此為了避免歧義程式碼的產生,該寫的括號還是不要省略的好
PHP的三元運算結合順序是反的http://www.jianshu.com/p/124f...
我猜是php對優先權的解讀跟java、js等語言不一樣,它可能解讀成了 (3 0) ? 4 : 1
(3 0) ? 4 : 1
在PHP是這樣的:
$a = (3 < 8 ? (9 < 6 ? 7 : 5): 2 > 0) ? 4 : 1;
所以是 4;
在JavaScript中是這樣的:
var a = (3 < 8) ? (9 < 6 ? 7 : 5) : (2 > 0 ? 4 : 1);
所以是 5。
所以如果不清楚運算子的優先級,就把括號都補全了。 ^_^
樓上正解~~~~~~
這樣寫真的不該打嗎?
三元運算子結合方向的問題:
java 從右向左。等效於
30?4:1)
php 從做向右。等效於
(30?4:1
因此為了避免歧義程式碼的產生,該寫的括號還是不要省略的好
PHP的三元運算結合順序是反的
http://www.jianshu.com/p/124f...
我猜是php對優先權的解讀跟java、js等語言不一樣,它可能解讀成了
(3 0) ? 4 : 1
在PHP是這樣的:
所以是 4;
在JavaScript中是這樣的:
所以是 5。
所以如果不清楚運算子的優先級,就把括號都補全了。 ^_^
樓上正解~~~~~~
這樣寫真的不該打嗎?