From 6e835e20e5257aee469615bff2e0b316c7a05c22 Mon Sep 17 00:00:00 2001 From: pengshiyu <1940607002@qq.com> Date: Tue, 1 Mar 2022 23:15:32 +0800 Subject: [PATCH] fix --- blog/php-basic/operator.md | 199 ++++++++++++++++++++++++++++++++++++- 1 file changed, 198 insertions(+), 1 deletion(-) diff --git a/blog/php-basic/operator.md b/blog/php-basic/operator.md index 8ba6b6e..a2e7090 100644 --- a/blog/php-basic/operator.md +++ b/blog/php-basic/operator.md @@ -145,4 +145,201 @@ echo 1 > 10 ? '1大于10': '1小于10'; ## 自操作运算符 -https://www.bilibili.com/video/BV18x411H7qD?p=32&spm_id_from=pageDriver +- `++` 原来的值 +1 +- `--` 原来的值 -1 + +```php +$a = 1; +$a++; // $a = $a + 1; +``` + +前置操作和后置操作 + +```php + $a = $a + $b; +-= +*= +/= +%= +``` + +需要注意除法或取余,右边的操作数为0的情况 + + +## 计算机码 + +计算机码:计算机实际存储数据的时候,采用的编码规则(二进制规则) + +数值本身最左边第一位是符号位,正数0,负数1 + +原码、反码、补码 + +- 原码 数据本身从十进制转换成二进制得到的结果 + - 正数:左边符号位为0(正数的原码,反码和补码就是原码本身) + - 负数:左边符号位为1 +- 反码 针对负数,符号位不变,其他位取反 +- 补码 针对负数,反码+1 + +系统中存在两个0 + +``` ++0 0000 0000 +-0 1000 0000 原码 +取反 1111 1111 +补码 0000 0000 +``` + +``` ++5 0000 0101(原码、反码、补码都是 ) + +-5 原码 1000 0101 + 反码 1111 1010 符号位不变,其他位取反 + 补码 1111 1011 反码+1 +``` + +## 位运算符 + +位运算:取出计算机中最小的单位(位bit)进行运算 + +``` +& 按位与 两位都为1,结果为1,否则为0 +| 按位或 有一个为1,结果为1 +~ 按位非 如果为1,结果为0;如果为0,结果为1 +^ 按位异或 两位相同则为0,不同为1 +<< 按位左移 所有位向左移动一位,右边补0,相当于乘以2 +>> 按位右移 所有为向右移动一位,左边补符号位对应内容(正数补0,负数补1),相当于除以2 +```` + +注意: +- 系统进行任何位运算的时候使用的都是补码 +- 运算结束之后都必须转换成原码才是最终显示的数据 + + +按位与 + +```php + 1111 1010(反码) +// -> 1111 1011(补码) + +// 5 0000 0101 +// -5 1111 1011(补码) +// & 0000 0001 正数 +// 判断符号位:0表示正数(原码),1表示负数(补码) + +``` + +按位非运算 +```php + 1111 1010(反码) +// -> 1111 1011(补码) + +// -5 1111 1011(补码) +// ~ 0000 0100 正数 +// 4 + +``` + + +按位右移 + +```php +>2); +// int(-2) + +// 计算过程: +// -5 1000 0101(原码) +// -> 1111 1010(反码) +// -> 1111 1011(补码) + +// -5 1111 1011(补码) +// >>2 --11 1110 +// 1111 1110 运算结果,左边补符号位(符号位为0,是负数补码) +// -1 1111 1101 反码 +// 1000 0010 原码 +// -2 + +``` + +运算符的优先级(由高到低) + + +结合方向| 运算符 |附加信息 +- | - | - +不适用 | clone new| clone 和 new +右| **|算术运算符 +不适用 | + - ++ -- ~ (int) (float) (string) (array) (object) (bool) @|算术 (一元 + 和 -), 递增/递减, 按位, 类型转换 和 错误控制 +左| instanceof | 类型 +不适用 | !| 逻辑运算符 +左| * / %| 算术运算符 +左| + - .| 算数 (二元 + 和 -), array 和 string (. PHP 8.0.0 前可用) +左| << >>| 位运算符 +左| .| string (PHP 8.0.0 起可用) +无| < <= > >= | 比较运算符 +无| == != === !== <> <=> | 比较运算符 +左| & | 位运算符 和 引用 +左| ^ | 位运算符 +左| \| | 位运算符 +左| && | 逻辑运算符 +左| \|\| |逻辑运算符 +右| ??|null 合并运算符 +无关联 | ? :| 三元运算符 (PHP 8.0.0 之前左联) +右| = += -= *= **= /= .= %= &= \|= ^= <<= >>= ??= | 赋值运算符 +不适用 | yield from | yield from +不适用 | yield| yield +不适用 | print| print +左| and | 逻辑运算符 +左| xor| 逻辑运算符 +左| or | 逻辑运算符 + +文档:[https://www.php.net/manual/zh/language.operators.precedence.php](https://www.php.net/manual/zh/language.operators.precedence.php) + + +https://www.bilibili.com/video/BV18x411H7qD?p=34&spm_id_from=pageDriver \ No newline at end of file -- GitLab