Sophie

Sophie

distrib > Mandriva > 2008.1 > x86_64 > by-pkgid > 05cd670d8a02b2b4a0ffb1756f2e8308 > files > 10728

php-manual-zh-5.2.4-1mdv2008.1.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML
><HEAD
><TITLE
>整型</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
REL="HOME"
TITLE="PHP 手册"
HREF="index.html"><LINK
REL="UP"
TITLE="类型"
HREF="language.types.html"><LINK
REL="PREVIOUS"
TITLE="布尔型"
HREF="language.types.boolean.html"><LINK
REL="NEXT"
TITLE="浮点型"
HREF="language.types.float.html"><META
HTTP-EQUIV="Content-type"
CONTENT="text/html; charset=UTF-8"></HEAD
><BODY
CLASS="sect1"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="NAVHEADER"
><TABLE
SUMMARY="Header navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
>PHP 手册</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="language.types.boolean.html"
ACCESSKEY="P"
>上一页</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
>章 11. 类型</TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="language.types.float.html"
ACCESSKEY="N"
>下一页</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="sect1"
><H1
CLASS="sect1"
><A
NAME="language.types.integer"
>整型</A
></H1
><P
>&#13;   一个 <A
HREF="language.types.integer.html"
><B
CLASS="type"
>integer</B
></A
> 是集合 Z = {..., -2, -1, 0, 1, 2, ...} 中的一个数。
  </P
><P
>&#13;   参见<A
HREF="ref.gmp.html"
>任意长度整数(GMP)</A
>,<A
HREF="language.types.float.html"
>浮点数</A
>和<A
HREF="ref.bc.html"
>任意精度数学库(BCMath)</A
>。
  </P
><DIV
CLASS="sect2"
><H2
CLASS="sect2"
><A
NAME="language.types.integer.syntax"
>语法</A
></H2
><P
>&#13;    整型值可以用十进制,十六进制或八进制符号指定,前面可以加上可选的符号(- 或者 +)。
   </P
><P
>&#13;    如果用八进制符号,数字前必须加上 <TT
CLASS="literal"
>0</TT
>(零),用十六进制符号数字前必须加上 <TT
CLASS="literal"
>0x</TT
>。
    <TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
CLASS="EXAMPLE"
><TR
><TD
><DIV
CLASS="example"
><A
NAME="AEN2850"
></A
><P
><B
>例 11-1. 整数文字表达</B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br />$a </font><font color="#007700">= </font><font color="#0000BB">1234</font><font color="#007700">; </font><font color="#FF8000">// 十进制数<br /></font><font color="#0000BB">$a </font><font color="#007700">= -</font><font color="#0000BB">123</font><font color="#007700">; </font><font color="#FF8000">// 一个负数<br /></font><font color="#0000BB">$a </font><font color="#007700">= </font><font color="#0000BB">0123</font><font color="#007700">; </font><font color="#FF8000">// 八进制数(等于十进制的 83)<br /></font><font color="#0000BB">$a </font><font color="#007700">= </font><font color="#0000BB">0x1A</font><font color="#007700">; </font><font color="#FF8000">// 十六进制数(等于十进制的 26)<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
>
    在字面上,整型变量正式的结构可以为:
    <DIV
CLASS="informalexample"
><P
></P
><A
NAME="AEN2853"
></A
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><PRE
CLASS="programlisting"
>decimal     : [1-9][0-9]*
            | 0

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

octal       : 0[0-7]+

integer     : [+-]?decimal
            | [+-]?hexadecimal
            | [+-]?octal</PRE
></TD
></TR
></TABLE
><P
></P
></DIV
>
    整型数的字长和平台有关,尽管通常最大值是大约二十亿(32 位有符号)。PHP 不支持无符号整数。
   </P
><DIV
CLASS="warning"
><P
></P
><TABLE
CLASS="warning"
BORDER="1"
WIDTH="100%"
><TR
><TD
ALIGN="CENTER"
><B
>警告</B
></TD
></TR
><TR
><TD
ALIGN="LEFT"
><P
>&#13;     如果向八进制数传递了一个非法数字(即 8 或 9),则后面其余数字会被忽略。
     <TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
CLASS="EXAMPLE"
><TR
><TD
><DIV
CLASS="example"
><A
NAME="AEN2857"
></A
><P
><B
>例 11-2. 八进制数的怪事</B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br />var_dump</font><font color="#007700">(</font><font color="#0000BB">01090</font><font color="#007700">); </font><font color="#FF8000">// 010 octal = 8 decimal<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
>
    </P
></TD
></TR
></TABLE
></DIV
></DIV
><DIV
CLASS="sect2"
><H2
CLASS="sect2"
><A
NAME="language.types.integer.overflow"
>整数溢出</A
></H2
><P
>&#13;    如果给定的一个数超出了 <A
HREF="language.types.integer.html"
><B
CLASS="type"
>integer</B
></A
> 的范围,将会被解释为
    <A
HREF="language.types.float.html"
><B
CLASS="type"
>float</B
></A
>。同样如果执行的运算结果超出了
    <A
HREF="language.types.integer.html"
><B
CLASS="type"
>integer</B
></A
> 范围,也会返回 <A
HREF="language.types.float.html"
><B
CLASS="type"
>float</B
></A
>。
    <DIV
CLASS="informalexample"
><P
></P
><A
NAME="AEN2867"
></A
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br />$large_number </font><font color="#007700">=&nbsp;&nbsp;</font><font color="#0000BB">2147483647</font><font color="#007700">;<br /></font><font color="#0000BB">var_dump</font><font color="#007700">(</font><font color="#0000BB">$large_number</font><font color="#007700">);<br /></font><font color="#FF8000">// 输出为:int(2147483647)<br /><br /></font><font color="#0000BB">$large_number </font><font color="#007700">=&nbsp;&nbsp;</font><font color="#0000BB">2147483648</font><font color="#007700">;<br /></font><font color="#0000BB">var_dump</font><font color="#007700">(</font><font color="#0000BB">$large_number</font><font color="#007700">);<br /></font><font color="#FF8000">// 输出为:float(2147483648)<br /><br />// 同样也适用于十六进制表示的整数:<br /></font><font color="#0000BB">var_dump</font><font color="#007700">( </font><font color="#0000BB">0x80000000 </font><font color="#007700">);<br /></font><font color="#FF8000">// 输出为:float(2147483648)<br /><br /></font><font color="#0000BB">$million </font><font color="#007700">= </font><font color="#0000BB">1000000</font><font color="#007700">;<br /></font><font color="#0000BB">$large_number </font><font color="#007700">=&nbsp;&nbsp;</font><font color="#0000BB">50000 </font><font color="#007700">* </font><font color="#0000BB">$million</font><font color="#007700">;<br /></font><font color="#0000BB">var_dump</font><font color="#007700">(</font><font color="#0000BB">$large_number</font><font color="#007700">);<br /></font><font color="#FF8000">// 输出为:float(50000000000)<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
><P
></P
></DIV
>
    <DIV
CLASS="warning"
><P
></P
><TABLE
CLASS="warning"
BORDER="1"
WIDTH="100%"
><TR
><TD
ALIGN="CENTER"
><B
>警告</B
></TD
></TR
><TR
><TD
ALIGN="LEFT"
><P
>&#13;      不幸的是 PHP 中有个 bug,因此当有负数参与时结果并不总是正确。例如当运算
      <TT
CLASS="literal"
>-50000 * $million</TT
> 时结果是
      <TT
CLASS="literal"
>-429496728</TT
>。不过当两个运算数都是正数时就没问题。
     </P
><P
>&#13;      这个问题已经在 PHP 4.1.0 中解决了。
     </P
></TD
></TR
></TABLE
></DIV
>
   </P
><P
>&#13;    PHP 中没有整除的运算符。<TT
CLASS="literal"
>1/2</TT
> 产生出 <A
HREF="language.types.float.html"
><B
CLASS="type"
>float</B
></A
>
    <TT
CLASS="literal"
>0.5</TT
>。可以总是舍弃小数部分,或者使用 <A
HREF="function.round.html"
><B
CLASS="function"
>round()</B
></A
> 函数。
    <DIV
CLASS="informalexample"
><P
></P
><A
NAME="AEN2879"
></A
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br />var_dump</font><font color="#007700">(</font><font color="#0000BB">25</font><font color="#007700">/</font><font color="#0000BB">7</font><font color="#007700">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">// float(3.5714285714286)<br /></font><font color="#0000BB">var_dump</font><font color="#007700">((int) (</font><font color="#0000BB">25</font><font color="#007700">/</font><font color="#0000BB">7</font><font color="#007700">)); </font><font color="#FF8000">// int(3)<br /></font><font color="#0000BB">var_dump</font><font color="#007700">(</font><font color="#0000BB">round</font><font color="#007700">(</font><font color="#0000BB">25</font><font color="#007700">/</font><font color="#0000BB">7</font><font color="#007700">));&nbsp;&nbsp;</font><font color="#FF8000">// float(4)<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
><P
></P
></DIV
>
   </P
></DIV
><DIV
CLASS="sect2"
><H2
CLASS="sect2"
><A
NAME="language.types.integer.casting"
>转换为整形</A
></H2
><P
>&#13;    要明示地将一个值转换为 <A
HREF="language.types.integer.html"
><B
CLASS="type"
>integer</B
></A
>,用 <TT
CLASS="literal"
>(int)</TT
> 或
    <TT
CLASS="literal"
>(integer)</TT
> 强制转换。不过大多数情况下都不需要强制转换,因为当运算符,函数或流程控制需要一个
    <A
HREF="language.types.integer.html"
><B
CLASS="type"
>integer</B
></A
> 参数时,值会自动转换。还可以通过函数
    <A
HREF="function.intval.html"
><B
CLASS="function"
>intval()</B
></A
> 来将一个值转换成整型。
   </P
><P
>&#13;    参见<A
HREF="language.types.type-juggling.html"
>类型戏法</A
>。
   </P
><DIV
CLASS="sect3"
><H3
CLASS="sect3"
><A
NAME="language.types.integer.casting.from-boolean"
>从<A
HREF="language.types.boolean.html"
>布尔值</A
>转换</A
></H3
><P
>&#13;     <TT
CLASS="constant"
><B
>FALSE</B
></TT
> 将产生出 <TT
CLASS="literal"
>0</TT
>(零),<TT
CLASS="constant"
><B
>TRUE</B
></TT
> 将产生出
     <TT
CLASS="literal"
>1</TT
>(壹)。
    </P
></DIV
><DIV
CLASS="sect3"
><H3
CLASS="sect3"
><A
NAME="language.types.integer.casting.from-float"
>从<A
HREF="language.types.float.html"
>浮点数</A
>转换</A
></H3
><P
>&#13;     当从浮点数转换成整数时,数字将被取整(<SPAN
CLASS="emphasis"
><I
CLASS="emphasis"
>丢弃小数位</I
></SPAN
>)。
    </P
><P
>&#13;     如果浮点数超出了整数范围(通常为
     <TT
CLASS="literal"
>+/- 2.15e+9 = 2^31</TT
>),则结果不确定,因为没有足够的精度使浮点数给出一个确切的整数结果。在此情况下没有警告,甚至没有任何通知!
    </P
><P
>&#13;     【译者注】在 Linux 下返回结果是最小负数(-2147483648),而在
     Windows 下返回结果是零(0)。
    </P
><DIV
CLASS="warning"
><P
></P
><TABLE
CLASS="warning"
BORDER="1"
WIDTH="100%"
><TR
><TD
ALIGN="CENTER"
><B
>警告</B
></TD
></TR
><TR
><TD
ALIGN="LEFT"
><P
>&#13;      决不要将未知的分数强制转换为 <A
HREF="language.types.integer.html"
><B
CLASS="type"
>integer</B
></A
>,这样有时会导致意外的结果。
      <DIV
CLASS="informalexample"
><P
></P
><A
NAME="AEN2910"
></A
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br /></font><font color="#007700">echo (int) ( (</font><font color="#0000BB">0.1</font><font color="#007700">+</font><font color="#0000BB">0.7</font><font color="#007700">) * </font><font color="#0000BB">10 </font><font color="#007700">); </font><font color="#FF8000">// 显示 7!<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
><P
></P
></DIV
>
      更多信息见<A
HREF="language.types.float.html#warn.float-precision"
>浮点数精度</A
>。
     </P
></TD
></TR
></TABLE
></DIV
></DIV
><DIV
CLASS="sect3"
><H3
CLASS="sect3"
><A
NAME="language.types.integer.casting.from-string"
>从字符串转换</A
></H3
><P
>&#13;     参见<A
HREF="language.types.string.html#language.types.string.conversion"
>字符串转换为数字</A
>。
    </P
></DIV
><DIV
CLASS="sect3"
><H3
CLASS="sect3"
><A
NAME="language.types.integer.casting.from-other"
>从其它类型转换</A
></H3
><DIV
CLASS="caution"
><P
></P
><TABLE
CLASS="caution"
BORDER="1"
WIDTH="100%"
><TR
><TD
ALIGN="CENTER"
><B
>小心</B
></TD
></TR
><TR
><TD
ALIGN="LEFT"
><P
>&#13;      没有定义从其它类型转换为整型的行为。目前的行为和值先<A
HREF="language.types.boolean.html#language.types.boolean.casting"
>转换为布尔值</A
>一样。不过<SPAN
CLASS="emphasis"
><I
CLASS="emphasis"
>不要</I
></SPAN
>依靠此行为,因为它会未加通知地改变。
     </P
></TD
></TR
></TABLE
></DIV
></DIV
></DIV
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="language.types.boolean.html"
ACCESSKEY="P"
>上一页</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="index.html"
ACCESSKEY="H"
>起始页</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="language.types.float.html"
ACCESSKEY="N"
>下一页</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>布尔型</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="language.types.html"
ACCESSKEY="U"
>上一级</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>浮点型</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>