算术运算符
常见算术运算符包括
-$a
,取反$a + $b
,加法,$a 和 $b 的和$a - $b
,减法,$a 和 $b 的差$a * $b
,乘法,$a 和 $b 的积$a / $b
,除法,$a 和 $b 的商$a % $b
,取余,$a 除以 $b 的余数$a ** $b
,乘方,$a 的 $b 次方
<?php
$a = 9 / 3;
$b = 9 / 4;
$c = -5 % 3;
$d = 5 % -3;
$e = 2 ** -2;
echo <<<EOT
9 / 3 = $a
9 / 4 = $b
-5 % 3 = $c
5 % -3 = $d
2 ** -2 = $e
EOT;
结果输出
9 / 3 = 3
9 / 4 = 2.25
-5 % 3 = -2
5 % -3 = 2
2 ** -2 = 0.25
从结果可以看出
- 除法运算符总是返回浮点数。只有在下列情况例外:两个操作数都是整数(或字符串转换成的整数)并且正好能整除,这时它返回一个整数。
- 取余运算符的操作数在运算之前都会转换成整数(除去小数部分)。 并且结果和被除数的符号(正负号)相同。即 $a % $b 的结果和 $a 的符号相同。
赋值运算符
基本的赋值运算符是 =
,意味着把右边表达式的值赋给左边的运算数。
赋值运算表达式的值也就是所赋的值。也就是说,$a = 3 的值是 3。这样就可以做一些小技巧:
<?php
$a = ($b = 4) + 5; // $a 现在成了 9,而 $b 成了 4。
对于数组 array,对有名字的键赋值是用 =>
运算符。此运算符的优先级和其它赋值运算符相同。
<?php
$a = ['a' => 1, 'b' => 3 * 4];
在基本赋值运算符之外,还有适合于所有二元算术,数组集合和字符串运算符的组合运算符
,这样可以在一个表达式中使用它的值并把表达式的结果赋给它,例如:
<?php
$a = 3;
$a += 5; //相当于 $a = $a + 5;
$b = "Hello ";
$b .= "There!"; //相当于 $b = $b. "There" ;
注意赋值运算将原变量的值拷贝到新变量中(传值赋值),所以改变其中一个并不影响另一个。这也适合于在密集循环中拷贝一些值例如大数组。
引用赋值
PHP 支持引用赋值,引用赋值意味着两个变量指向了同一个数据,没有拷贝任何东西。
<?php
$arr1 = $arr2 = [1,2,3];
foreach($arr1 as &$a) {
$a++;
}
foreach($arr2 as $a) {
$a++;
}
print_r($arr1);
print_r($arr2);
结果输出
Array
(
[0] => 2
[1] => 3
[2] => 4
)
Array
(
[0] => 1
[1] => 2
[2] => 3
)
从结果中可以看出,引用赋值会改变原值,传值赋值则不会。
位运算符
位运算符允许对整型数中指定的位进行求值和操作。
$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)。
Example 1 整数的 AND,OR 和 XOR 位运算符
<?php
/*
* Ignore the top section,
* it is just formatting to make output clearer.
*/
$format = '(%1$2d = %1$04b) = (%2$2d = %2$04b)'
. ' %3$s (%4$2d = %4$04b)' . "\n";
echo <<<EOH
--------- --------- -- ---------
result value op test
--------- --------- -- ---------
EOH;
/*
* Here are the examples.
*/
$values = array(0, 1, 2, 4, 8);
$test = 1 + 4;
echo "\n Bitwise AND \n";
foreach ($values as $value) {
$result = $value & $test;
printf($format, $result, $value, '&', $test);
}
echo "\n Bitwise Inclusive OR \n";
foreach ($values as $value) {
$result = $value | $test;
printf($format, $result, $value, '|', $test);
}
echo "\n Bitwise Exclusive OR (XOR) \n";
foreach ($values as $value) {
$result = $value ^ $test;
printf($format, $result, $value, '^', $test);
}
?>
以上例程会输出:
--------- --------- -- ---------
result value op test
--------- --------- -- ---------
Bitwise AND
( 0 = 0000) = ( 0 = 0000) & ( 5 = 0101)
( 1 = 0001) = ( 1 = 0001) & ( 5 = 0101)
( 0 = 0000) = ( 2 = 0010) & ( 5 = 0101)
( 4 = 0100) = ( 4 = 0100) & ( 5 = 0101)
( 0 = 0000) = ( 8 = 1000) & ( 5 = 0101)
Bitwise Inclusive OR
( 5 = 0101) = ( 0 = 0000) | ( 5 = 0101)
( 5 = 0101) = ( 1 = 0001) | ( 5 = 0101)
( 7 = 0111) = ( 2 = 0010) | ( 5 = 0101)
( 5 = 0101) = ( 4 = 0100) | ( 5 = 0101)
(13 = 1101) = ( 8 = 1000) | ( 5 = 0101)
Bitwise Exclusive OR (XOR)
( 5 = 0101) = ( 0 = 0000) ^ ( 5 = 0101)
( 4 = 0100) = ( 1 = 0001) ^ ( 5 = 0101)
( 7 = 0111) = ( 2 = 0010) ^ ( 5 = 0101)
( 1 = 0001) = ( 4 = 0100) ^ ( 5 = 0101)
(13 = 1101) = ( 8 = 1000) ^ ( 5 = 0101)
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)