源码哥,靠谱的网站源码下载站 帮助 每日签到

源码哥

广告位《资讯详情页横幅-1150*?》

PHP整型:Integer

  • 发布者:源码哥 时间:2022-09-16 09:25 阅读:254
  • 扫一扫,手机访问
广告位《资讯详情页摘要上方横幅-828*?》
摘要:整型等于集数={…,-2,-1,0,1,2,…}。语法整数值int可以用十进制、十六进制、八进制或二进制表示,也可以在前面加上符号(-或+)。可以使用负运算符表示负整型。要使用八进制表达式,必须在数字前面加上0(零)。PHP8.1.0以后,也可以在8进制表示前加上0o或0O。要使用十六进制表示法,必须在数字前面加上0x。要使用二进制表达式,必须在数字前面加0b。PHP7.4.0以后,在整数值上下划线(_)中描述的场景,使用以下步骤创建明

整型等于集数={…,-2,-1,0,1,2,…}。


语法


整数值int可以用十进制、十六进制、八进制或二进制表示,也可以在前面加上符号(-或+)。可以使用负运算符表示负整型。


要使用八进制表达式,必须在数字前面加上0(零)。PHP8.1.0以后,也可以在8进制表示前加上0o或0O。要使用十六进制表示法,必须在数字前面加上0x。要使用二进制表达式,必须在数字前面加0b。


PHP7.4.0以后,在整数值上下划线(_)中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。


<?php
$a = 1234; // 十进制数
$a = 0123; // 八进制数 (等于十进制 83)
$a = 0o123; // 八进制数 (PHP 8.1.0 起)
$a = 0x1A; // 十六进制数 (等于十进制 26)
$a = 0b11111111; // 二进制数字 (等于十进制 255)
$a = 1_234_567; // 整型数值 (PHP 7.4.0 以后)
?>


int语法的结构形式如下(在PHP7.4.0之前不支持下划线)。


十进制:[1-9][0-9]*(__[0-9]+)*


十六进制:0[xX][0-9a-fA-F]+(u[0-9a-fA-F]+)*


八进制:0[oO]?[0-7]+(_[0-7]+)*


二进制:0[bB][01]+(__[01]+)*


整数:十进制、16进制、八进制、二进制。


整数int的字大小因平台而异,但通常的最大值约为20亿(带符号的32位)。64位平台的最大值通常在9E18左右。PHP不支持unsigned int。int值的词长等于常数PHP_INT_SIZE表示,最大值为常数PHP_INT_可以用AX表示,最小值是常数PHP_INT_可以用MIN表示。


整数溢出


如果指定的数值超出整型范围,则解释为浮点。如果运算结果超出整型范围,则返回浮点。


示例2 32位系统中的整数溢出:


<?php
$large_number = 2147483647;
var_dump($large_number);                     // int(2147483647)
$large_number = 2147483648;
var_dump($large_number);                     // float(2147483648)
$million = 1000000;
$large_number =  50000 * $million;
var_dump($large_number);                     // float(50000000000)
?>


示例3 64位系统中的整数溢出:


<?php
$large_number = 9223372036854775807;
var_dump($large_number);                     // int(9223372036854775807)
$large_number = 9223372036854775808;
var_dump($large_number);                     // float(9.2233720368548E+18)
$million = 1000000;
$large_number =  50000000000000 * $million;
var_dump($large_number);                     // float(5.0E+19)
?>


PHP没有整型除法舍入运算符。请使用intdiv()代替。1/2生成浮点0.5。可以放弃小数部分、将其转换为int或使用根()函数对值进行舍入。


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


转换为整数


要将值显式地转换为int,请使用(int)或(integer)进行转换。但是,大多数情况下不需要分配角色。这是因为如果运算符、函数或流控制假定为int参数,则会自动转换值。也可以使用函数intval()将值转换为int。


如果将资源转换为int,则结果将是PHP运行时分配给资源的唯一资源编号。


从布尔值转换

假返回0(零),真返回1(1)。


float的转换

当浮点浮点数从浮点数浮点转换为整数整型时,将被截断。


如果float不在int范围内(通常在32位平台上+/-2.15e+9=2^31,在64位平台上+/-9.22e+18=2^63),则结果是未知的。定义,因为没有足够的精度来获得精确的整型结果。在这种情况下,没有警告,也没有通知!


提示:

NaN和Infinity在转换为int时为零。


注意:

不要将未知的分数转换为整型。可能会出现意想不到的结果。


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


从字符串转换


如果字符串是数字或第一个数字,则解析为相应的整型值。否则,将转换为零(0)。


从空值转换

空值转换为零(0)。


来自其他类型的转换


注意:

未定义从其他类型转换为整型的行为。请不要依赖现有行为,因为它会在没有预告的情况下更改。


数字文字的前零表示“这是八进制”。但是,请不要混乱。字符串开头的零是不同的。因此:


$x = 0123; // 83
$y = "0123" + 0 // 123


这里有一些技巧可以将“点”IP地址转换为长整数,并向后转换。这是非常有用的,因为如果数据库表中的IP地址存储为BIGINT而不是字符,那么访问它的速度会快得多。


BIGINT的IP:


<?php
  $ipArr    = explode('.',$_SERVER['REMOTE_ADDR']);
  $ip       = $ipArr[0] * 0x1000000
            + $ipArr[1] * 0x10000
            + $ipArr[2] * 0x100
            + $ipArr[3]
            ;
?>


IP作为BIGINT从db读回虚线形式:

请记住,PHP整数运算符是整数——不是长的。此外,由于PHP中没有整数除法,我们通过进行位移位来节省一些S-L-O-W地板(<除法>)。我们必须对$ipArr[0]使用floor(/),因为尽管$ipVal存储为长值,$ipVal>>24将对截断的整数值$ipVal进行操作$然而,ipVint是一个很好的整数,因此


我们可以享受比特转换:


<?php
        $ipVal = $row['client_IP'];
        $ipArr = array(0 =>
                    floor(  $ipVal               / 0x1000000) );
        $ipVint   = $ipVal-($ipArr[0]*0x1000000); // for clarity
        $ipArr[1] = ($ipVint & 0xFF0000)  >> 16;
        $ipArr[2] = ($ipVint & 0xFF00  )  >> 8;
        $ipArr[3] =  $ipVint & 0xFF;
        $ipDotted = implode('.', $ipArr);
?>


问题:

var_dump((int)010)//产出8
var_dump((int)“010”)//产出10


第一个是八进制符号,所以输出是正确的。但是,当将“010”转换为整数时,该怎么办呢。它也应该是输出8?


解答:

使用(int)转换为整数将始终转换为默认基数,即10。


以这种方式将字符串转换为数字并没有考虑PHP中格式化整数值的多种方式(以零为基数8,以“0x”为基数16,以“0b”为基数2)。它只需查看字符串中的第一个字符,并将其转换为以10为基数的整数。前导零将被去除,因为它们在数值中没有意义,因此您将得到(int)“010”的十进制值10。


使用(int)010在基之间转换整数值将考虑格式化整数的各种方式。010中的前导零表示数字采用八进制表示法,使用(int)010将其转换为以10为基数的十进制值8。


这类似于使用0x10以十六进制(以16为基数)表示法进行写入。使用(int)0x10将将其转换为基数为10的十进制值16,而使用(int)“0x10”将以十进制值0结束:由于“x”不是数值,因此之后的任何值都将被忽略。


如果希望将字符串“010”解释为八进制值,则需要指示PHP这样做。intval(“010”,8)将解释以8为基数的数字,而不是默认的以10为基数的数值,您将以十进制值8结束。您还可以使用octdec(“010”)将八进制字符串转换为十进制值8。另一个选项是使用base_convert(“010,8,10”)显式地将数字“010”从基数8转换为基数10,但是,此函数将返回字符串“8”,而不是整数8。


将字符串转换为整数与intval函数使用的逻辑相同:


使用指定的转换基数(默认为基数10)返回var的整数值。


intval允许指定不同的基数作为第二个参数,而直接转换操作不允许,因此使用(int)将始终将字符串视为基数10。


相关连接: 网站源码 企业网站源码

  • 全部评论(0)
广告位《资讯详情页最新发布上方横幅-828*?》
最新发布的资讯信息
【网站开发|HTML】html编码设置(2022-10-17 11:26)
【网站开发|HTML】html添加注释的方法(2022-10-17 11:25)
【网站开发|HTML】html元素(2022-10-17 11:23)
【网站开发|HTML】html属性介绍(2022-10-17 11:22)
【网站开发|HTML】html标签说明(2022-10-17 11:21)
【网站开发|HTML】html的基本结构(2022-10-17 11:20)
【行业资讯|】如何学习好网站前端开发?(2022-10-14 14:53)
【网站开发|JavaScript】如何轻松学习JavaScript(2022-10-14 14:26)
【网站开发|node.js】NodeJS Service Docker映像终极优化指南(2022-10-14 14:14)
【网站开发|JavaScript】后端response响应返回图像,前端怎么下载图片?(2022-09-23 10:17)
联系我们
Q Q:472206683
微信:472206683
邮箱:472206683@qq.com
时间:09:00 - 24:00
联系客服
售前咨询 网站搭建 技术支持 联系客服
18639176864
手机版
手机版二维码
扫一扫进手机版
返回顶部