優先順序問題確實是比較讓人鬱悶的問題,有時候出錯了,查詢半天最後才發現是它的問題。下面這個問題也是很常見的乙個。
<?php
$a = 3;
$b = 5;
if( $a = 5 || $b = 7 )
echo $a . ", " . $b;
a和b分別為什麼呢?不執行 先猜一猜。
第一眼看上去 不假思索的話 相信很多人說是6, 8
然後稍加思索的話 可能會選 6, 6
然後再思索的話 可能結果是2, 6
當然 這只是我的臆測哈 然而最終結果是啥呢?執行一下結果顯示: 1, 6
為什麼會是1,6呢 我們一起分析一下流程。
賦值部分不用說了 簡單的a = 3, b = 5;
然後關鍵就在於if條件語句了 即:a = 5 || b = 7;
我們知道優先順序中 邏輯運算子|| 是高於 賦值運算子=的,那麼以上的式子可以寫成
a = 5 (||) b = 7
而我們又知道,這個式子是從左向右執行的,而且 賦值運算子的方向是 從右到左 ,於是這個式子可以轉化為
a = ( 5 (||) b = 7 )
恩 這裡也有個小陷阱哈, a 的值是什麼呢?
我們應該知道,邏輯運算子是返回boolean型別結果的,那麼,此處a的值就應該是true,而不是我們都認為的5。
而b呢? 再看5||b=7 邏輯運算子結構中方向也是從左至右的,那麼5為true之後就不會往右執行,而直接返回true了,所以b不會被賦值。
接下來進入if的結構體中。
$a++;
$b++;
b是沒問題的, 沒有被覆蓋, 所以還是開始被賦值的5, ++自增之後為6;
a呢? 這裡就有個小知識點了.
首先我們已經知道a的值現在為true, 然後, 我們可以看看php手冊關於運算子一節中-> 遞增/遞減運算子,
在開始部分有乙個主意事項
note: 遞增/遞減運算子不影響布林值。
遞減 null 值也沒有效果,但是遞增 null 的結果是 1。
所以, 在if的結構體中,a自增還是true。
所以, 最後echo結果為1, 6。
可以執行試一下哈 可以在if裡面var_dump($a, $b);
也可以在echo前面var_dump($a, $b);
證明a的型別是bool(true)的。
實現乙個優先順序佇列
怎樣實現乙個按優先順序排序的佇列?並且在這個佇列上面每次 pop 操作總是返回優先順序最高的那個元素 下面的類利用 heapq 模組實現了乙個簡單的優先順序佇列 import heapq class priorityqueue def init self self.queue self.index ...
java優先順序的乙個細節
對於乙個連等型的表示式,其在不同位置相同的變數,會因為變數賦值順序的不同,影響變數的值是否賦值 成功,如下 public class test 這段 的結果是 03 雖然 表示式的運算順序是從右向左,但是變數在運算前 已經被從左至右讀入cpu,所以,對於第一部分 第乙個a的值為0,第二個a值為 1 ...
優先順序問題
若有 int i 10,j 2 則執行完 i j 8 後 i 的值為28。請問這句話的說法是正確的嗎?正確 均為賦值運算子,賦值運算子的優先順序只比逗號運算子高,所以會先 之後再 一共有十五個優先順序 1 2 負號 取變數位址 type 強制型別 sizeof 3 4 5 6 7 8 9 10 11...