本節講解的內容
- 算術運算符
- 遞增、遞減運算符
- 賦值運算符
- 字符串運算符
- 比較運算符
- 位運算符
- 邏輯運算符
- 三元運算符
- 錯誤控制運算符
前言
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.....1
1 / 2 = 0.....1
二進制(逆序排列):
11
12 / 2 = 6....0
6 / 2 = 3.....0
3 / 2 = 1.....1
1 / 2 = 0.....1
二進制:
1100
15 / 2 = 7....1
7 / 2 = 3.....1
3 / 2 = 1.....1
1 / 2 = 0.....1
二進制:
1111
二進制轉換成十進制:“按權展開求和”
1111 = 1 * 20 + 1 * 21 + 1 * 22 + 1 * 23 = 15
10 = 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 == 0
echo $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 == 3
echo $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 == 1
echo $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 == -3
echo $a;
-----結果-----
-3
左移(將 $a 中的位向左移動 $b 次(每一次移動都表示“乘以 2”))
左移時右側以零填充,符號位被移走意味着正負號不被保留。
$a = 1;
// 二進制:
// 00000000 00000000 00000000 00000001
// 左移時右側以零填充,符號位被移走意味着正負號不被保留。
// 00000000 00000000 00000000 00000100 == 4
echo $a << 2;//將 $a 中的位向左移動2次
-----結果-----
4
右移時左側以符號位填充,意味着正負號被保留。
$a = 4;
// 右移時左側以符號位填充,意味着正負號被保留。
// 00000000 00000000 00000000 00000100
// 00000000 00000000 00000000 00000001 == 1
echo $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 表達式之前,該表達式可能產生的任何錯誤信息都被忽略掉
當你不想用戶看到錯誤信息可以使用。
總結
說了這麼多總算把運算符的大部分都說完了,其中還有數組運算符,類型運算符等,在數組和對象的時候會說。