算術運算子
遞增、遞減運算子
賦值運算子
字串運算子
比較運算子
位元運算子
邏輯運算子
#三元運算子
錯誤控制運算子
#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 398f47218d96e6e3905b5d5c53ab96d7 $b 大於 TRUE ,如果 $a 嚴格大於$b 。
$a f70956e7ec837b33ad58d9f2b76b01b2= $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 02d433e7892e8ebdbc35963e2a225d71> $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 表达式之前,该表达式可能产生的任何错误信息都被忽略掉
当你不想用户看到错误信息可以使用。
说了这么多总算把运算符的大部分都说完了,其中还有数组运算符,类型运算符等,在数组和对象的时候会说。
以上就是PHP基础教程三之运算符的内容,更多相关内容请关注PHP中文网(www.php.cn)!