首页 > 编程笔记

PHP整数及其常见操作

PHP 可以处理有符号整数,包括负整数、零和正整数。

在 PHP 中,整数的处理范围与 long 类型(C 语言类型)相同,32位平台中整数的处理范围是 -2147483648~+2147483647,即 -232~+232-1;64 位平台中整数的处理范围是 -9223372036854775808~+9223372036854775807,即 -264~+264-1。

PHP整数的常见操作

1) 不同进制的整数

在 PHP 中,数字字面量除了常用的十进制,还可以使用其他进制的整数,如:
下面的代码演示了不同进制数值的字面量。
<?php
echo 15,"<br>";
echo 0x1F,"<br>";
echo 011,"<br>";
echo 0b1111;
?>
所有数字都以对应的十进制数输出,执行结果为:

15
31
9
15

2) 整数间的算术运算

PHP 中的算术运算包括:
下面的代码演示了这些算术运算的应用。
<?php
$x = 5;
$y = 3;
echo "$x + $y = ",$x+$y,"<br>";
echo "$x - $y = ",$x-$y,"<br>";
echo "$x * $y = ",$x*$y,"<br>";
echo "$x / $y = ",$x/$y,"<br>";
echo "$x % $y = ",$x%$y,"<br>";
echo "$x ** $y = ",$x**$y,"<br>";
?>
代码执行结果如下:

5 + 3 = 8
5 - 3 = 2
5 * 3 = 15
5 / 3 = 1.6666666666667
5 ** 3 = 125

3) NAN值

数值在运算过程中,可能会出现无效的结果,此时,需要关注一个特殊值,即 NaN,它表示“不是一个数值”(not a number)。

判断 NaN 值时可以使用 is_nan() 函数,如 is_nan($x) 返回 true,表示 $x 不是一个数值,并且不能转换为数值。

下面的代码使用 is_nan() 函数测试字符串内容是否可以转换为数值,然后使用 intval() 函数将字符串转换为整数。
<?php
$s = "123";
var_dump(is_nan($s));
echo "<br>";
$x = intval($s);
var_dump($x);
?>
代码执行结果为:

bool(false)
int(123)

4) 增量(++)与减量(--)运算

和很多 C 风格编程语言一样,PHP 中也包括增量运算和减量运算,其原理也是相同的,下面先来看增量运算。

增量运算又分为前增量和后增量,它们的区别在于表达式的值。前增量运算时,变量会先执行加 1 操作,然后返回表达式的值,这样,表达式和变量的值都是原值加 1,如下面的代码。
<?php
$i = 1;
echo ++$i, "<br />" , $i;
?>
执行代码会显示两个 2,即表达式和变量的值都是 $i 加 1 后的结果。

后增量运算时,表达式会先返回变量的值,然后进行变量加 1 的操作,如下面的代码。
<?php
$i = 1;
echo $i++, "<br />" , $i;
?>
执行代码会显示 1 和 2,即表达式先返回 $i 变量的值 1,然后进行加 1 操作,最终 $i 变量的值是 2。

减量运算同样分为前减量运算和后减量运算,只不过它执行的是减 1 的操作,如下面的代码演示了后减量运算的应用。
<?php
$i = 1;
echo $i--,"<br>";
echo $i;
?>
执行代码会显示 1 和 0,即 $i-- 表达式会先返回 1,然后进行 $i 变量减 1 的操作。

5) 位运算

位运算是对整数二进制位进行运算。PHP 中的位运算包括:
下面的代码显示了这些位运算的操作:
<?php
$x = 0b0110;
$y = 0b1010;
echo decbin(($x & $y)),"<br />";
echo decbin(($x | $y)),"<br />";
echo decbin((~$y)),"<br />";
echo decbin(($x ^ $y)),"<br />";
echo decbin(($x << 2)),"<br />";
echo decbin(($x >> 2));
?>
代码执行结果为:

10
1110
1111111111111111111111111111111111111111111111111111111111110101
1100
11000
1

结果并不难理解,只是第三行按位取反的结果需要解释下,大家可以数数有几位数。64 位!在 64 位平台上,整数是 64 位的,那么 1010 前面的 60 位是 60 个 0,取反后是 60 个 1。

6) 进制转换

需要整数不同进制的形式时,可以使用数学模块中的相关函数,如:
下面的代码演示了 base_convert() 函数的使用。
<?php
echo base_convert("f1",16,2);
?>
本例中,将十六进制数的 f1 转换为二进制数形式,代码执行结果如下。

1110001


下面的代码演示了十进制数和十六进制数之间的转换,其中使用了 dechex() 和 hexdec() 函数。
<?php
echo dechex(128),"<br>";
echo hexdec("1F");
?>
代码执行结果为:

80
31

7) 组合运算符

组合运算符就是将一些基本的二元运算符与赋值运算符(=)组合使用,如下面的代码。
<?php
$x = 10;
$x += 99;
echo $x;
?>
执行代码会显示 109。

本例中使用了 += 运算符,$x += 99 的含义是 $x = $x + 99。对于算术运算和位运算,都可以使用这种形式的组合运算符,如 +=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=。

推荐阅读