乙個常見的優先順序問題

2021-06-21 22:56:28 字數 1227 閱讀 6548

優先順序問題確實是比較讓人鬱悶的問題,有時候出錯了,查詢半天最後才發現是它的問題。下面這個問題也是很常見的乙個。

<?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...