PHP整数及其常见操作
PHP 可以处理有符号整数,包括负整数、零和正整数。
在 PHP 中,整数的处理范围与 long 类型(C 语言类型)相同,32位平台中整数的处理范围是 -2147483648~+2147483647,即 -232~+232-1;64 位平台中整数的处理范围是 -9223372036854775808~+9223372036854775807,即 -264~+264-1。
下面的代码演示了不同进制数值的字面量。
下面的代码演示了这些算术运算的应用。
判断 NaN 值时可以使用 is_nan() 函数,如 is_nan($x) 返回 true,表示 $x 不是一个数值,并且不能转换为数值。
下面的代码使用 is_nan() 函数测试字符串内容是否可以转换为数值,然后使用 intval() 函数将字符串转换为整数。
增量运算又分为前增量和后增量,它们的区别在于表达式的值。前增量运算时,变量会先执行加 1 操作,然后返回表达式的值,这样,表达式和变量的值都是原值加 1,如下面的代码。
后增量运算时,表达式会先返回变量的值,然后进行变量加 1 的操作,如下面的代码。
减量运算同样分为前减量运算和后减量运算,只不过它执行的是减 1 的操作,如下面的代码演示了后减量运算的应用。
下面的代码显示了这些位运算的操作:
下面的代码演示了 base_convert() 函数的使用。
下面的代码演示了十进制数和十六进制数之间的转换,其中使用了 dechex() 和 hexdec() 函数。
本例中使用了 += 运算符,$x += 99 的含义是 $x = $x + 99。对于算术运算和位运算,都可以使用这种形式的组合运算符,如 +=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=。
在 PHP 中,整数的处理范围与 long 类型(C 语言类型)相同,32位平台中整数的处理范围是 -2147483648~+2147483647,即 -232~+232-1;64 位平台中整数的处理范围是 -9223372036854775808~+9223372036854775807,即 -264~+264-1。
PHP整数的常见操作
1) 不同进制的整数
在 PHP 中,数字字面量除了常用的十进制,还可以使用其他进制的整数,如:- 十六进制,使用 0x 开始的数值表示十六进制数,如 0x1F 表示十进制的 31。
- 八进制,数字 0 开始的数值表示八进制数,如 011 表示十进制的 9。
- 二进制,使用 0b 开始的数值表示二进制数,如 0b1111 表示十进制的 15。
下面的代码演示了不同进制数值的字面量。
<?php echo 15,"<br>"; echo 0x1F,"<br>"; echo 011,"<br>"; echo 0b1111; ?>所有数字都以对应的十进制数输出,执行结果为:
15
31
9
15
2) 整数间的算术运算
PHP 中的算术运算包括:- 加法运算,使用 + 运算符。
- 减法运算,使用 - 运算符。
- 乘法运算,使用 * 运算符。
- 除法运算,使用/运算符。如果不能整除,会返回包含小数部分的结果(浮点数)。
- 模运算,又称为取余数运算。使用 % 运算符,用于计算整数相除的余数,如果运算数不是整数,则自动转换为整数后计算。
- ** 运算符,求某数的次方,如 2**3 的结果为 8。这是 PHP 5.6 新增的运算符。
下面的代码演示了这些算术运算的应用。
<?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 中的位运算包括:- 按位与运算,使用 & 运算符,两个二进制位上的值都是 1 时,运算结果为 1,否则为 0。
- 按位或运算,使用 | 运算符,两个二进制位上的值有一个是 1 时,运算结果为 1,两个数据都是 0 时,运算结果为 0。
- 按位取反运算,使用 ~ 运算符,1 取反得 0,0 取反得 1。
- 按位异或运算,使用 ^ 运算符,两个二进制位上的值一个为 1,另一个为 0 时,结果为 1,两个数据相同时,结果为 0。
- 位左移运算,使用 << 运算符,如 16<<2 就是将 16 的二进制位向左(高位)移动 2 位,低位补 0,相当于执行 16*2*2 的操作,可以理解为 x<<n 执行了 x=x×2n 运算。
- 位右移运算,使用 >> 运算符,将数据的二进制位向右(低位)移动,高位补 0。如 x>>n 执行的就是 x=x÷2n 运算。
下面的代码显示了这些位运算的操作:
<?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
6) 进制转换
需要整数不同进制的形式时,可以使用数学模块中的相关函数,如:- base_convert() 函数,任意进制之间的转换。参数一指定需要转换的数据(字符串类型);参数二指定源数据进制(整数类型);参数三指定目标进制(整数类型)。函数会返回转换后的结果(字符串类型)。
- decbin() 函数,十进制数转换为二进制数。
- decoct() 函数,十进制数转换为八进制数。
- dechex() 函数,十进制数转换为十六进制数。
- bindec() 函数,二进制数转换为十进制数。
- octdec() 函数,八进制数转换为十进制数。
- hexdec() 函数,十六进制数转换为十进制数。
- bin2hex() 函数,二进制数转换为十六进制数。
- hex2bin() 函数,十六进制数转换为二进制数。
下面的代码演示了 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。对于算术运算和位运算,都可以使用这种形式的组合运算符,如 +=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=。