PHP基礎教程三之運算符

本節講解的內容

  • 算術運算符
  • 遞增、遞減運算符
  • 賦值運算符
  • 字符串運算符
  • 比較運算符
  • 位運算符
  • 邏輯運算符
  • 三元運算符
  • 錯誤控制運算符

前言

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 表達式之前,該表達式可能產生的任何錯誤信息都被忽略掉

當你不想用戶看到錯誤信息可以使用。

總結

說了這麼多總算把運算符的大部分都說完了,其中還有數組運算符,類型運算符等,在數組和對象的時候會說。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章