整型


整型

一个 integer 是集合 Z = {..., -2, -1, 0, 1, 2, ...} 中的一个数。

参见

语法

整型值可以使用十进制,十六进制或八进制表示,前面可以加上可选的符号(- 或者 +)。

八进制表示数字前必须加上 0(零),十六进制表示数字前必须加上 0x

Example #1 整数文字表达

<?php
$a 
1234// 十进制数
$a = -123// 负数
$a 0123// 八进制数 (等于十进制 83)
$a 0x1A// 十六进制数 (等于十进制 26)
?>

整型(integer)的形式描述:

decimal     : [1-9][0-9]*
            | 0

hexadecimal : 0[xX][0-9a-fA-F]+

octal       : 0[0-7]+

integer     : [+-]?decimal
            | [+-]?hexadecimal
            | [+-]?octal

整型数的字长和平台有关,尽管通常最大值是大约二十亿(32 位有符号)。PHP 不支持无符号整数。Integer值的字长可以用常量PHP_INT_SIZE来表示,自 PHP 4.4.0 和 PHP 5.0.5后,最大值可以用常量PHP_INT_MAX来表示。

Warning

如果向八进制数传递了一个非法数字(即 8 或 9),则后面其余数字会被忽略。

Example #2 八进制数的怪事

<?php
var_dump
(01090); // 八进制 010 = 十进制 8
?>

整数溢出

如果给定的一个数超出了 integer 的范围,将会被解释为 float。同样如果执行的运算结果超出了 integer 范围,也会返回 float

<?php
$large_number 
=  2147483647;
var_dump($large_number);
// 输出为:int(2147483647)

$large_number =  2147483648;
var_dump($large_number);
// 输出为:float(2147483648)

// 同样也适用于十六进制表示的整数: 从 2^31 到 2^32-1:
var_dump0xffffffff );
// 输出: float(4294967295)

// 不适用于大于 2^32-1 的十六进制表示的数:
var_dump0x100000000 );
// 输出: int(2147483647)

$million 1000000;
$large_number =  50000 $million;
var_dump($large_number);
// 输出: float(50000000000)
?>
Warning

不幸的是 PHP 中有个 bug,因此当有负数参与时结果并不总是正确。例如当运算 -50000 * $million 时结果是 -429496728。不过当两个运算数都是正数时就没问题。

这个问题已经在 PHP 4.1.0 中解决了。

PHP 中没有整除的运算符。1/2 产生出 float 0.5。可以总是舍弃小数部分,或者使用 round() 函数。 There is no integer division operator in PHP. 1/2 yields the float 0.5. The value can be casted to an integer to round it downwards, or the round() function provides finer control over rounding.

<?php
var_dump
(25/7);         // float(3.5714285714286) 
var_dump((int) (25/7)); // int(3)
var_dump(round(25/7));  // float(4) 
?>

转换为整型

要明确地将一个值转换为 integer,用 (int)(integer) 强制转换。不过大多数情况下都不需要强制转换,因为当运算符,函数或流程控制需要一个 integer 参数时,值会自动转换。还可以通过函数 intval() 来将一个值转换成整型。

参见: 类型转换的判别.

布尔值转换

FALSE 将产生出 0(零),TRUE 将产生出 1(壹)。

浮点数转换

当从浮点数转换成整数时,将向零取整。

如果浮点数超出了整数范围(通常为 +/- 2.15e+9 = 2^31),则结果不确定,因为没有足够的精度使浮点数给出一个确切的整数结果。在此情况下没有警告,甚至没有任何通知!

Warning

决不要将未知的分数强制转换为 integer,这样有时会导致不可预料的结果。

<?php
echo (int) ( (0.1+0.7) * 10 ); // 显示 7!
?>

参见 关于浮点数精度的警告

从字符串转换

参见 字符串转换为数字

从其它类型转换

Caution

没有定义从其它类型转换为整型的行为。不要依赖任何可见的行为,因为它会未加通知地改变。 The behaviour of converting to integer is undefined for other types. Do not rely on any observed behaviour, as it can change without notice.


«  布尔类型
» 浮点型
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 SQL jQuery C# C++ java Android IOS oracle MongoDB SQLite wamp 交通频道 作文范文 涪陵北-昆山南 九三-泰来 昆明-廉江 太原东-兴国 宁海-江宁 晏城-玛纳斯 德伯斯-南兴安 武义北-金华 韶关东-锦州南 煤田-大杨树 鹰潭北-五府山 银浪-上海南 敦煌-大同 阜新南-枣庄西 共青城-衡山 子洲-商丘 聊城-深州 白城-三源浦 晏城-藁城 合浦-藤县 宝鸡-涿州 东莞东-泰山 通远堡-凌源 三道湖-大东 兰考-武山 济南-南平北 枣强-沈阳 芦家村-阿贵图 山城镇-锦州 宁陵县-礼泉 邢台-石家庄 峰高铺-江津 南充-重庆北 绥中-阿城 汇流河-大雁 九台-滦县 驻马店-雷州 临沂-许昌 芦沟-茂舍祖 新民-公营子 昆明-哈尔滨 衡阳-吐鲁番北 台前-泗水 松江南-温州南 大同-焦作 石家庄-廉江 三家寨-玉舍 江宁西-松江南 新余-达州 玉山-大余 乳山-廊坊北 十里坪-荒沟西 静海-汾阳 库车-华蓥 民权北-福州 山阴-忻州 敦煌-疏勒河 宁陵县-安陆 渑池-榆林 双城堡-肇东 滦河-开原西 南宁-昆明南 旬阳北-稷山 丹阳-瑞安 秦皇岛-太原东 北碚-六枝 任丘-日照 常州-武威 扎音河-凤凰城 泰山-定西 连山关-宽甸 大同-美岱召 广顺场-黄磏 沙坨子-庙宫 蓝村-南杂木 西里-呼和浩特 长治北-武安 湘乡-福泉 承德东-锦州 达州-龙江 跪求自驾车从云南曲靖到重庆的最佳路线!
从广州到昭平怎么坐车最快?
深圳到泉州坐车要多久
郑州科技学院到花园路丰产路国贸中心的路线
现在有从宜宾或成都到保定或北京的长途汽车吗
去盐城的那辆K8576火车列车有餐车吗
从太升北路到双流机场
请问南通到舟山乘车路线
佛山联创客车汽车职业学校好不好
关于合肥公交682的路线
深圳到湖南长沙的飞机票价钱数多少?
今年桂林海洋乡看银杏,是11月20号去好还是27号去更好?
从江宁到中山东路300号长发大厦怎么坐车啊坐地铁2号线是不是
天津到西安坐列车火车要多久 普通的,票价
福建莆田到山东滕州市的动力组有吗
广州到山东聊城怎么坐车
从北京四惠东至四通桥华星双安怎么坐地铁+公交最方便呢?
暑假期间 由吉林开往宁波的K75次火车 人多么?
我想从北京运行李回澧县,请问怎么样最合适到常德也可以。
请问有没有从昆山到潍坊的火车列车票
铜梁到成都客车汽车在哪个车站乘坐,每天几班具体时间是什么时
从上海火车列车站到安徽合肥的长途汽车一天有几班 分别是几点
从辽宁工业大学东门如何能到锦州图书馆 还有就是如果想在那里
在漯河哪里可以买到正宗的普洱茶?
我想知道从武广高铁广州南站到佛山保利水城最方便的乘车路线
南京到扬州的火车列车票价
上海同济大学本部附近有没有列车票代售点?如果抵达?
关于郑州到珠海坐火车列车的路线
天津红桥客运站 从天津到雄县最早几点有车
从西安咸阳机场到秦始皇兵马佣博物馆

Copyright © 2016 phpStudy |