mirror of
https://github.com/fofolee/uTools-Manuals.git
synced 2025-06-19 06:16:58 +08:00
244 lines
16 KiB
HTML
244 lines
16 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||
<html>
|
||
<head>
|
||
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
||
<title>Integer 整型</title>
|
||
</head>
|
||
<div id="layout">
|
||
<div id="layout-content"><div id="language.types.integer" class="sect1">
|
||
<h2 class="title">Integer 整型</h2>
|
||
|
||
<p class="simpara">
|
||
<span class="type"><a href="language.types.integer.html" class="type integer">integer</a></span> 是集合 ℤ = {..., -2, -1, 0, 1, 2, ...} 中的某个数。
|
||
</p>
|
||
|
||
<p class="para">
|
||
参见:
|
||
</p>
|
||
|
||
<ul class="itemizedlist">
|
||
<li class="listitem">
|
||
<span class="simpara">
|
||
<a href="book.gmp.html" class="link">任意长度整数/GMP</a>
|
||
</span>
|
||
</li>
|
||
<li class="listitem">
|
||
<span class="simpara">
|
||
<a href="language.types.float.html" class="link">浮点型</a>
|
||
</span>
|
||
</li>
|
||
<li class="listitem">
|
||
<span class="simpara">
|
||
<a href="book.bc.html" class="link">任意精度数学库/BCMath</a>
|
||
</span>
|
||
</li>
|
||
</ul>
|
||
|
||
<div class="sect2" id="language.types.integer.syntax">
|
||
<h3 class="title">语法</h3>
|
||
|
||
<p class="simpara">
|
||
整型值可以使用十进制,十六进制,八进制或二进制表示,前面可以加上可选的符号(- 或者 +)。
|
||
</p>
|
||
|
||
<p class="para">
|
||
二进制表达的 <span class="type"><a href="language.types.integer.html" class="type integer">integer</a></span> 自 PHP 5.4.0 起可用。
|
||
</p>
|
||
<p class="para">
|
||
要使用八进制表达,数字前必须加上
|
||
<em>0</em>(零)。要使用十六进制表达,数字前必须加上
|
||
<em>0x</em>。要使用二进制表达,数字前必须加上
|
||
<em>0b</em>。
|
||
</p>
|
||
|
||
<div class="example" id="example-58">
|
||
<p><strong>Example #1 整数文字表达</strong></p>
|
||
<div class="example-contents">
|
||
<div class="phpcode"><code><span style="color: #000000">
|
||
<span style="color: #0000BB"><?php<br />$a </span><span style="color: #007700">= </span><span style="color: #0000BB">1234</span><span style="color: #007700">; </span><span style="color: #FF8000">// 十进制数<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= -</span><span style="color: #0000BB">123</span><span style="color: #007700">; </span><span style="color: #FF8000">// 负数<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">0123</span><span style="color: #007700">; </span><span style="color: #FF8000">// 八进制数 (等于十进制 83)<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">0x1A</span><span style="color: #007700">; </span><span style="color: #FF8000">// 十六进制数 (等于十进制 26)<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">0b11111111</span><span style="color: #007700">; </span><span style="color: #FF8000">// 二进制数字 (等于十进制 255)<br /></span><span style="color: #0000BB">?></span>
|
||
</span>
|
||
</code></div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<p class="para">
|
||
<span class="type"><a href="language.types.integer.html" class="type integer">integer</a></span> 语法的结构形式是:
|
||
</p>
|
||
|
||
<div class="informalexample">
|
||
<div class="example-contents">
|
||
<div class="cdata"><pre>
|
||
decimal : [1-9][0-9]*
|
||
| 0
|
||
|
||
hexadecimal : 0[xX][0-9a-fA-F]+
|
||
|
||
octal : 0[0-7]+
|
||
|
||
binary : 0b[01]+
|
||
|
||
integer : [+-]?decimal
|
||
| [+-]?hexadecimal
|
||
| [+-]?octal
|
||
| [+-]?binary
|
||
</pre></div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<p class="para">
|
||
整型数的字长和平台有关,尽管通常最大值是大约二十亿(32 位有符号)。64
|
||
位平台下的最大值通常是大约 9E18,除了 Windows 下 PHP 7 以前的版本,总是 32 位的。
|
||
|
||
PHP 不支持无符号的 <span class="type"><a href="language.types.integer.html" class="type integer">integer</a></span>。<span class="type"><a href="language.types.integer.html" class="type Integer">Integer</a></span> 值的字长可以用常量
|
||
<strong><code>PHP_INT_SIZE</code></strong>来表示,自
|
||
PHP 4.4.0 和 PHP 5.0.5后,最大值可以用常量 <strong><code>PHP_INT_MAX</code></strong> 来表示,最小值可以在 PHP 7.0.0 及以后的版本中用常量 <strong><code>PHP_INT_MIN</code></strong> 表示。
|
||
</p>
|
||
|
||
<div class="warning"><strong class="warning">Warning</strong>
|
||
<p class="para">
|
||
PHP 7 以前的版本里,如果向八进制数传递了一个非法数字(即 8 或 9),则后面其余数字会被忽略。PHP 7 以后,会产生 Parse Error。
|
||
</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="sect2" id="language.types.integer.overflow">
|
||
<h3 class="title">整数溢出</h3>
|
||
|
||
<p class="para">
|
||
如果给定的一个数超出了 <span class="type"><a href="language.types.integer.html" class="type integer">integer</a></span> 的范围,将会被解释为
|
||
<span class="type"><a href="language.types.float.html" class="type float">float</a></span>。同样如果执行的运算结果超出了
|
||
<span class="type"><a href="language.types.integer.html" class="type integer">integer</a></span> 范围,也会返回 <span class="type"><a href="language.types.float.html" class="type float">float</a></span>。
|
||
</p>
|
||
|
||
<div class="example" id="example-59">
|
||
<p><strong>Example #2 32 位系统下的整数溢出</strong></p>
|
||
<div class="example-contents">
|
||
<div class="phpcode"><code><span style="color: #000000">
|
||
<span style="color: #0000BB"><?php<br />$large_number </span><span style="color: #007700">= </span><span style="color: #0000BB">2147483647</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$large_number</span><span style="color: #007700">); </span><span style="color: #FF8000">// int(2147483647)<br /><br /></span><span style="color: #0000BB">$large_number </span><span style="color: #007700">= </span><span style="color: #0000BB">2147483648</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$large_number</span><span style="color: #007700">); </span><span style="color: #FF8000">// float(2147483648)<br /><br /></span><span style="color: #0000BB">$million </span><span style="color: #007700">= </span><span style="color: #0000BB">1000000</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$large_number </span><span style="color: #007700">= </span><span style="color: #0000BB">50000 </span><span style="color: #007700">* </span><span style="color: #0000BB">$million</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$large_number</span><span style="color: #007700">); </span><span style="color: #FF8000">// float(50000000000)<br /></span><span style="color: #0000BB">?></span>
|
||
</span>
|
||
</code></div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div class="example" id="example-60">
|
||
<p><strong>Example #3 64 位系统下的整数溢出</strong></p>
|
||
<div class="example-contents">
|
||
<div class="phpcode"><code><span style="color: #000000">
|
||
<span style="color: #0000BB"><?php<br />$large_number </span><span style="color: #007700">= </span><span style="color: #0000BB">9223372036854775807</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$large_number</span><span style="color: #007700">); </span><span style="color: #FF8000">// int(9223372036854775807)<br /><br /></span><span style="color: #0000BB">$large_number </span><span style="color: #007700">= </span><span style="color: #0000BB">9223372036854775808</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$large_number</span><span style="color: #007700">); </span><span style="color: #FF8000">// float(9.2233720368548E+18)<br /><br /></span><span style="color: #0000BB">$million </span><span style="color: #007700">= </span><span style="color: #0000BB">1000000</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$large_number </span><span style="color: #007700">= </span><span style="color: #0000BB">50000000000000 </span><span style="color: #007700">* </span><span style="color: #0000BB">$million</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$large_number</span><span style="color: #007700">); </span><span style="color: #FF8000">// float(5.0E+19)<br /></span><span style="color: #0000BB">?></span>
|
||
</span>
|
||
</code></div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<p class="para">
|
||
PHP 中没有整除的运算符。<em>1/2</em> 产生出 <span class="type"><a href="language.types.float.html" class="type float">float</a></span>
|
||
<em>0.5</em>。
|
||
值可以舍弃小数部分,强制转换为 <span class="type"><a href="language.types.integer.html" class="type integer">integer</a></span>,或者使用
|
||
<span class="function"><a href="round.html" class="function">round()</a></span> 函数可以更好地进行四舍五入。
|
||
</p>
|
||
|
||
<div class="informalexample">
|
||
<div class="example-contents">
|
||
<div class="phpcode"><code><span style="color: #000000">
|
||
<span style="color: #0000BB"><?php<br />var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">25</span><span style="color: #007700">/</span><span style="color: #0000BB">7</span><span style="color: #007700">); </span><span style="color: #FF8000">// float(3.5714285714286) <br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">((int) (</span><span style="color: #0000BB">25</span><span style="color: #007700">/</span><span style="color: #0000BB">7</span><span style="color: #007700">)); </span><span style="color: #FF8000">// int(3)<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">round</span><span style="color: #007700">(</span><span style="color: #0000BB">25</span><span style="color: #007700">/</span><span style="color: #0000BB">7</span><span style="color: #007700">)); </span><span style="color: #FF8000">// float(4) <br /></span><span style="color: #0000BB">?></span>
|
||
</span>
|
||
</code></div>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
<div class="sect2" id="language.types.integer.casting">
|
||
<h3 class="title">转换为整型</h3>
|
||
|
||
<p class="simpara">
|
||
要明确地将一个值转换为 <span class="type"><a href="language.types.integer.html" class="type integer">integer</a></span>,用 <em>(int)</em> 或
|
||
<em>(integer)</em> 强制转换。不过大多数情况下都不需要强制转换,因为当运算符,函数或流程控制需要一个
|
||
<span class="type"><a href="language.types.integer.html" class="type integer">integer</a></span> 参数时,值会自动转换。还可以通过函数
|
||
<span class="function"><a href="intval.html" class="function">intval()</a></span> 来将一个值转换成整型。
|
||
</p>
|
||
|
||
<p class="simpara">
|
||
将 <span class="type"><a href="language.types.resource.html" class="type resource">resource</a></span> 转换成 <span class="type"><a href="language.types.integer.html" class="type integer">integer</a></span> 时,
|
||
结果会是 PHP 运行时为 <span class="type"><a href="language.types.resource.html" class="type resource">resource</a></span> 分配的唯一资源号。
|
||
</p>
|
||
|
||
<p class="simpara">
|
||
参见:<a href="language.types.type-juggling.html" class="link">类型转换的判别</a>。
|
||
</p>
|
||
|
||
<div class="sect3" id="language.types.integer.casting.from-boolean">
|
||
<h4 class="title">从<a href="language.types.boolean.html" class="link">布尔值</a>转换</h4>
|
||
|
||
<p class="simpara">
|
||
<strong><code>FALSE</code></strong> 将产生出 <em>0</em>(零),<strong><code>TRUE</code></strong> 将产生出
|
||
<em>1</em>(壹)。
|
||
</p>
|
||
</div>
|
||
|
||
<div class="sect3" id="language.types.integer.casting.from-float">
|
||
<h4 class="title">
|
||
从<a href="language.types.float.html" class="link">浮点型</a>转换
|
||
</h4>
|
||
|
||
<p class="simpara">
|
||
当从浮点数转换成整数时,将<em class="emphasis">向下</em>取整。
|
||
</p>
|
||
|
||
<p class="para">
|
||
如果浮点数超出了整数范围(32 位平台下通常为
|
||
<em>+/- 2.15e+9 = 2^31</em>,64 位平台下,除了 Windows,通常为
|
||
<em>+/- 9.22e+18 = 2^63</em>),则结果为未定义,因为没有足够的精度给出一个确切的整数结果。在此情况下没有警告,甚至没有任何通知!
|
||
</p>
|
||
|
||
<blockquote class="note"><p><strong class="note">Note</strong>:
|
||
<p class="para">
|
||
PHP 7.0.0 起,NaN 和 Infinity 在转换成 <span class="type"><a href="language.types.integer.html" class="type integer">integer</a></span> 时,不再是 undefined 或者依赖于平台,而是都会变成零。
|
||
</p>
|
||
</p></blockquote>
|
||
|
||
<div class="warning"><strong class="warning">Warning</strong>
|
||
<p class="para">
|
||
绝不要将未知的分数强制转换为 <span class="type"><a href="language.types.integer.html" class="type integer">integer</a></span>,这样有时会导致不可预料的结果。
|
||
</p>
|
||
|
||
<div class="informalexample">
|
||
<div class="example-contents">
|
||
<div class="phpcode"><code><span style="color: #000000">
|
||
<span style="color: #0000BB"><?php<br /></span><span style="color: #007700">echo (int) ( (</span><span style="color: #0000BB">0.1</span><span style="color: #007700">+</span><span style="color: #0000BB">0.7</span><span style="color: #007700">) * </span><span style="color: #0000BB">10 </span><span style="color: #007700">); </span><span style="color: #FF8000">// 显示 7!<br /></span><span style="color: #0000BB">?></span>
|
||
</span>
|
||
</code></div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<p class="para">
|
||
参见<a href="language.types.float.html#warn.float-precision" class="link">关于浮点数精度的警告</a>。
|
||
</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="sect3" id="language.types.integer.casting.from-string">
|
||
<h4 class="title">从字符串转换</h4>
|
||
|
||
<p class="simpara">
|
||
参见<a href="language.types.string.html#language.types.string.conversion" class="link">字符串转换为数值</a>。
|
||
</p>
|
||
</div>
|
||
|
||
<div class="sect3" id="language.types.integer.casting.from-other">
|
||
<h4 class="title">从其它类型转换</h4>
|
||
|
||
<div class="caution"><strong class="caution">Caution</strong>
|
||
<p class="simpara">
|
||
没有定义从其它类型转换为整型的行为。<em class="emphasis">不要</em>依赖任何现有的行为,因为它会未加通知地改变。
|
||
</p>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
</div></div></div></body></html> |