本節講解的內容
算術運算子
遞增、遞減運算子
賦值運算子
字串運算子
比較子
位元運算符
邏輯運算子
三元運算子
錯誤控制運算子
前言
PHP的運算子是在php基礎中必須要掌握的一個技能,它是php資料處理的橋樑,資料的各種運算都要用到運算子,比如加、減、乘、除,與、或等運算。
算術運算子
算術運算子:就是用來處理四則運算的符號,這是最簡單,也最常用的符號,尤其是數位處理,幾乎都會使用到算術運算子號。
算術的運算子分類:
-$a 取反,$a的負值
$a = -1;echo -$a;-----結果-----1
$a + $b 加法 $a和$b的和
$a = 12;$b = 12;$res = $a + $b;echo $res;-----結果-----24
$a - $b 減法$a和$b的差
$a = 12;$b = 6;$res = $a - $b;echo $res;-----結果-----6
$a * $b 乘法 $a和$b的積
$a = 2;$b = 3;$res = $a * $b;echo $res;-----結果-----6
$a / $b 除法 $a和$b的商
$a = 12;$b = 6;$res = $a / $b;echo $res;-----結果-----2
$a % $b 模數 $a和$b的餘數;
$a = 3;$b = 2;$res = $a % $b;echo $res;-----結果-----1
遞增、遞減運算子
++$a:$a的值加一,然後返回 $a,這是前加 。
$a++ 返回 $a ,然後將 $a 的值加一,這是後加。
–$a $a 的值減一,然後返回 $a ,前減。
$a– 返回 $a ,然後將 $a 的值減一,後減。
++$a
$a = 1;$b = ++$a;//先++,在進行賦值運算,等價於$a = $a + 1; $b = $a;echo $b . '<br>' . $a;-----結果-----$b = 2 $a = 2
$a++
$a = 1;$b = $a++;//先賦值,在進行++運算,等價於$b = $a; $a = $a + 1;echo $b . '<br>' . $a;-----結果-----$b = 1 $a = 2
減減的情況和上面的情況一樣。
賦值運算子
基本的賦值運算子是“=”,它實際上意味著把右邊運算式的值賦給左邊的運算數。
$a = 1;$b = 'string';
還有情況是 +=、-=、/=等
$a = 1;$a += 2;//等價於$a = $a + 2;echo $a;-----結果-----3
字串運算子
有兩個字串。運算子是(“.”),它返回其左右參數串連後的字串。
$a = 1;$b = 2;echo '$a = ' . $a . ' $b = ' . $b;-----結果-----$a = 1 $b = 2;
比較子
比較子是比較兩個變數的情況,是否數值一樣,是否資料類型一樣,而比較出來的結果大多數是布爾類型的。
常見的比較子是:
$a == $b 等於 true 當$a == $b,這裡一般只會去判斷數值時候相等,不會去判斷類型是否相等。
$a === $b 全等 true,如果 $a 等於 $b ,並且它們的類型也相同。
$a != $b 不等 ture,當兩個變數的值不相等的時候返回true;
$a <> $b 不等 true,上面的情況還有一種寫法,如果類型轉換後 $a 不等於 $b 。
$a !== $b 不全等 true,如果 $a 不等於 $b ,或者它們的類型不同,注意兩個變數有一個不相等的時候都返回true;(數值、類型)
$a < $b 小與 TRUE ,如果 $a 嚴格小於 $b 。
$a > $b 大於 TRUE ,如果 $a 嚴格大於$b 。
$a <= $b 小於等於 TRUE ,如果 $a 小於或者等於 $b 。
$a >= $b 大於等於 TRUE ,如果 $a 大於或者等於 $b 。
$a = 2;$b = '2';var_dump($a == $b); //判斷兩個數值是否相等,比較的時候會進行類型轉換。-----結果-----bool(true) var_dump($a === $b);//判斷數值和類型是否相等,當時全等比較的時候,不會進行類型轉換。-----結果-----bool(false)
位元運算符
位元運算符允許對整型數中指定的位以二進位的方式進行求值和操作。
在這之前我們先來說一說二進位
二進位簡單介紹
在電腦中所有數存錯在記憶體中都是以二進位的形式儲存的。位元運算說穿了,就是直接對整數在記憶體中的二進位位進行操作。
什麼是二進位:位元據是用0和1兩個數位來表示的數。它的基數為2,進位規則是“逢二進一”,借位規則是“借一當二”。
十進位轉換成二進位:“除以2取餘,逆序排列”(除二取餘法)
商 餘數3 / 2 = 1.....11 / 2 = 0.....1二進位(逆序排列):1112 / 2 = 6....06 / 2 = 3.....03 / 2 = 1.....11 / 2 = 0.....1二進位:110015 / 2 = 7....17 / 2 = 3.....13 / 2 = 1.....11 / 2 = 0.....1二進位:1111
二進位轉換成十進位:“按權展開求和”
1111 = 1 * 20 + 1 * 21 + 1 * 22 + 1 * 23 = 1510 = 0 * 20 + 1 * 21 = 2
電腦中的符號位有三種表達形式:
在進行位元運算時,都是轉換成補碼進行運算的。
正數的二進位表示是二進位的最前面有一個0表示正數
正數的原碼,反碼,補碼都一樣(三碼合一)
負數的二進位表示是二進位的最前面有一個1表示負數。
負數的原碼是用公式求得的位元,反碼是除了符號位,其他的都取反(1變0,0變1),補碼是反碼 + 1。
比如-1
原碼 10000000 00000000 00000000 00000001 反碼 11111111 11111111 11111111 11111110 取反補碼 11111111 11111111 11111111 11111111 加1
至於為什麼要寫32位,我的理解是:整型佔4個位元組,每個位元組8位,總共32位,其中一個符號位。
二進位的簡單介紹就到這裡
PHP中位元運算符的分類
$a & $b And(按位與) 將把 $a 和 $b 中都為 1 的位設為 1。
$a | $b Or(按位或) 將把 $a 和 $b 中任何一個為 1 的位設為 1。
$a ^ $b Xor(按位異或) 將把 $a 和 $b 中一個為 1 另一個為 0 的位設為 1。
~ $a Not(按位取反) 將 $a 中為 0 的位設為 1,反之亦然。
$a << $b Shift left(左移) 將 $a 中的位向左移動 $b 次(每一次移動都表示“乘以 2”)。
$a >> $b Shift right(右移) 將 $a 中的位向右移動 $b 次(每一次移動都表示“除以 2”)。
樣本:
與(1 1 = 1; 1 0 = 0;0 0 = 0)
$a = 1 & 2;//進行“與”運算 兩個都為1的時候為1,其他為0// 1的補碼// 00000000 00000000 00000000 00000001// 2的補碼// 00000000 00000000 00000000 00000010// 結果// 00000000 00000000 00000000 00000000 == 0echo $a;-----結果-----0
或(1 1 = 1;1 0 = 1;0 0 = 0)
$a = 1 | 2;//進行“或”運算 至少有一個為1的時候為1,其他為0// 1的補碼// 00000000 00000000 00000000 00000001// 2的補碼// 00000000 00000000 00000000 00000010// 結果// 00000000 00000000 00000000 00000011 == 3echo $a;-----結果-----3
異或(1 0 = 1; 1 1 = 0; 0 0 = 1)
$a = 3 ^ 2;//進行“異或”運算 一個為1,一個為0的時候為1,其他為0// 1的補碼// 00000000 00000000 00000000 00000011// 2的補碼// 00000000 00000000 00000000 00000010// 結果// 00000000 00000000 00000000 00000001 == 1echo $a;-----結果-----1
取反(1 = 0; 0 = 1)注意符號位的變化。
$a = ~2;//進行“取反”運算 1變0,0變1// 2的二進位// 00000000 00000000 00000000 00000010// 11111111 11111111 11111111 11111101 前面一個1,是負數// 反碼// 11111111 11111111 11111111 11111100// 原碼// 10000000 00000000 00000000 00000011 == -3echo $a;-----結果------3
左移(將 $a 中的位向左移動 $b 次(每一次移動都表示“乘以 2”))
左移時右側以零填充,符號位被移走意味著加號或減號不被保留。
$a = 1;// 二進位:// 00000000 00000000 00000000 00000001// 左移時右側以零填充,符號位被移走意味著加號或減號不被保留。// 00000000 00000000 00000000 00000100 == 4echo $a << 2;//將 $a 中的位向左移動2次-----結果-----4
右移時左側以符號位填充,意味著加號或減號被保留。
$a = 4;// 右移時左側以符號位填充,意味著加號或減號被保留。 // 00000000 00000000 00000000 00000100// 00000000 00000000 00000000 00000001 == 1echo $a >> 2;-----結果-----1
到這裡位元運算符算術基本說完了……
邏輯運算子
邏輯運算子也就是判斷邏輯,它的返回結果一般是布爾類型,像與或非等;而PHP中的邏輯運算子有:
$a and $b And(邏輯與) TRUE ,如果 $a 和 $b 都為 TRUE 。
$a or $b Or(邏輯或) TRUE ,如果 $a 或 $b 任一為 TRUE 。
! $a Not(邏輯非) TRUE ,如果 $a 不為 TRUE 。
$a && $b And(邏輯與) TRUE ,如果 $a 和 $b 都為 TRUE 。
$a || $b Or(邏輯或) TRUE ,如果 $a 或 $b 任一為 TRUE 。
邏輯與(當運算式的兩邊都為true的時候結果為真)
兩個&符號:
$a = 2;$b = 3;if($a > 1 && $b > 2){ //左邊的為true,右邊的為true;兩邊都為true,結果為true; echo '與';}-----結果-----與
一個&符號:
$a = 2;$b = 3;if($a > 1 & $b > 2){ //左邊的為true,右邊的為true;兩邊都為true,結果為true; echo '與';}-----結果-----與
區別:兩個&時:如果有一個邏輯判斷運算式為假,則後面的邏輯運算就不會執行,俗稱短路現象。
一個&:兩邊的都會判斷。不管是真是假。
邏輯或(當左右兩個運算式其中有一個是true的時候,為真)
兩個|符號:
$a = 2;$b = 4;if($a > 1 || $b < 3){ //左邊的為true,右邊的為false; echo '或';}-----結果-----或
一個|符號:
$a = 2;$b = 4;if($a > 1 | $b < 3){ //左邊的為true,右邊的為false; echo '或';}-----結果-----或
區別:兩個|時:如果有一個邏輯判斷運算式為真,則後面的邏輯運算就不會執行,短路現象。
一個|:兩邊的都會判斷。不管是真是假。
非(!true = false; !false = true)
$a = true;var_dump(!$a);-----結果-----bool(false)
三元運算子
文法為:條件運算式?運算式1:運算式2。
說明:問號前面的位置是判斷的條件,判斷結果為bool型,為true時調用運算式1,為false時調用運算式2。
其邏輯為:“如果為真執行第一個,否則執行第二個。”
$a = 456;$b = $a > 10 ? true : false; //問號前面的結果為真,執行第一個true;var_dump($b);-----結果-----bool(true);
三元運算子可以說是if…else的簡化版,在以後的開發中也會經常使用到的。
錯誤控制運算子
介紹: PHP 支援一個錯誤控制運算子:@。當將其放置在一個 PHP 運算式之前,該運算式可能產生的任何錯誤資訊都被忽略掉
當你不想使用者看到錯誤資訊可以使用。
總結
說了這麼多總算把運算子的大部分都說完了,其中還有數組運算子,類型運算子等,在數組和對象的時候會說。
以上就是PHP基礎教程三之運算子的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!