整型(integer)表示的变量属于所有整数集合Z。
Z={...,−N,−N+1,...,0,1,2,...,N−1,N,...}
整型可表示的数值如表2-2所示。
表2-2 整型数值表示范围
在使用integer时,需要注意integer所能表示的最大值和最小值,防止溢出。integer所能表示的数值范围由字长决定,而字长一般与机器平台相关。例如64位机器上,integer所能表示的范围如下:
−2 63 ~2 63 −1
PHP有如表2-3所示的常量表示数值范围。
表2-3 PHP整型数值常量
在涉及大数运算时,可以使用BCMath(任意精度数学,手册链接:http://php.net/manual/zh/book.bc.php)扩展。
题目描述: 有两个大数,如何求它们的和?
看题目要求,两个大数超过了integer所能表示的整数范围,所以不能直接相加。在实际应用时,如果安装了BCMath扩展,可以使用bcadd来计算。例如:
<?php echo bcadd('9999999999999999','25'); //Output 10000000000000024 ?>
在此,可以采用模拟手工计算加法的方法:
(1)设置初始进位为0。
(2)从个位开始,向高位移动,每次取出当前位置的两个数字与进位相加。
(3)第(2)步得到的和如果大于10,则取余数作为该位置的值,并设置进位为1;如果小于10,则取得到的和为该位置的值,并设置进位为0。
(4)重复第(2)步和第(3)步,直到较长的数字处理完。
(5)如果最后的进位为1,则在结果的最高位拼接上1。
程序代码如下:(源码文件:ch02/big_add.php)