⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 datatype.html

📁 关于 C++ 的历史无须我来介绍了
💻 HTML
字号:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <link rel="stylesheet" href="css/stdlayout.css" type="text/css">
  <link rel="stylesheet" href="css/print.css" type="text/css">
  <meta content="text/html; charset=gb2312" http-equiv="content-type">
  <title>资料型态</title>
</head>
<body>
<h3><a href="http://caterpillar.onlyfun.net/GossipCN/index.html">From
Gossip@caterpillar</a></h3>
<h1><a href="CppGossip.html">C++ Gossip: 资料型态</a></h1>
<br>
程式在执行的过程中,需要运算许多的资讯,也需要储存许多的资讯,资讯是储存在记忆体空间中,由于资料的型态各不相同,在储存时所需要的容量不一,不同的
资料必须要配给不同的空间大小来储存,因而有了“资料型态”(Data type)的规范。 <br>
<br>
C++中基本的资料型态主要区分为“整数”(Integer)、“浮点数”(Float)、“字元”(Character),而这几种还可以细分,如下所
示: <br>
<ul>
  <li>整数</li>
</ul>
<div style="margin-left: 40px;">用
来表示整数值,可以区分为short、int、与long,可容纳的大小各不相同,short的长度为半个word,int表示一个word,而long
可能是一个或两个word,在32位元机器上int与long的长度通常是相同的,型态的长度越长,表示可表示的整数值范围越大。</div>
<ul>
  <li>浮点数</li>
</ul>
<div style="margin-left: 40px;">用
来表示小数值,可以区分为float、double与long
double,float的长度为一个word,double的长度为二个word,long double长度为3或4个word。<br>
</div>
<ul>
  <li>字元</li>
</ul>
<div style="margin-left: 40px;">用
来储存字元,长度为1个位元组,其字元编码主要依ASCII表而来,由于字元在记忆体中所占有的空间较小,所以它也可以用来储存较小范围的整数。 <br>
<br>
</div>
<br>
以上的资料型态在记忆体中所占有的大小依平台系统而有所差异,word的大小取决于机器,在32位元机器上通常一个word是4个位元组,如果想要知道这
些资
料型态在您所使用的平台上,所占有的记忆体空间有多少,最好的作法是使用sizeof()运算子,它可以告诉您确实的记忆体大小,下面这个程式是个简单的
示范:<br>
<br>
<pre>#include &lt;iostream&gt;<br>using namespace std; <br><br>int main() { <br>    cout &lt;&lt; "\n型态\t大小(bytes)"; <br>    cout &lt;&lt; "\nint\t" &lt;&lt; sizeof(int); <br>    cout &lt;&lt; "\nlong\t" &lt;&lt; sizeof(long); <br>    cout &lt;&lt; "\nfloat\t" &lt;&lt; sizeof(float); <br>    cout &lt;&lt; "\ndouble\t" &lt;&lt; sizeof(double); <br>    cout &lt;&lt; "\nchar\t" &lt;&lt; sizeof(char);<br>    cout &lt;&lt; "\n";<br><br>    return 0; <br>} </pre>
<br>
其中'\t'是跳格字元,它相当于在主控台中按下Tab键的效果,可以用来对齐下一个显示位置;以下是执行结果: <br>
<small> </small><small> </small><small> </small><small> </small><small>
</small> <small></small>
<table style="text-align: left; width: 100%;" border="0" cellpadding="2"
 cellspacing="2">
  <tbody>
    <tr>
      <td style="background-color: rgb(0, 0, 0);"><small><span
 style="color: rgb(255, 255, 255);">型态&nbsp;&nbsp;&nbsp; 大小(bytes)</span><br
 style="color: rgb(255, 255, 255);">
      <span style="color: rgb(255, 255, 255);">int&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp; &nbsp; 4</span><br style="color: rgb(255, 255, 255);">
      <span style="color: rgb(255, 255, 255);">long&nbsp;&nbsp;&nbsp;
&nbsp; 4</span><br style="color: rgb(255, 255, 255);">
      <span style="color: rgb(255, 255, 255);">float&nbsp;&nbsp; &nbsp;
&nbsp;4</span><br style="color: rgb(255, 255, 255);">
      <span style="color: rgb(255, 255, 255);">double&nbsp; 8</span><br
 style="color: rgb(255, 255, 255);">
      <span style="color: rgb(255, 255, 255);">char&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp; 1</span></small></td>
    </tr>
  </tbody>
</table>
<br>
<br>
由于使用的平台不同,您的结果不一定会与这边的结果相同;因为每种资料型态所占有的记忆体大小不同,因而可以储存的数值范围也就不同,例如在上例中,整数
int的记忆体空间是4个位元组,所以它可以储存的整数范围为-2147483648至2147483647,如果储存值超出这个范围的话称之为“溢值”
(Overflow),会造成程式不可预期的结果。<br>
<br>
整数计算范围的方式很简单,例如int整数占4位元组的话,可储存范围为2^32 /
2,除以2是因为要分另一半储存负整数的关系,整数的最左边位元被用来表示正负号,如果最左边位元为0表示正号,若为1则表示负号,在C++中还可以宣告
无正负号整数,此时最左边位元不用来表示正负号,例如一个8位元字元被用来表示整数时,可以表示数值-128到127,而一个无正负号字元则可以表示0到
255的正整数。<br>
<br>
浮点数的储存方式则是分为两个部份,例如float占四个位元组的话,前三个位元组是用来储存假数,后一个位元组储存指数,例如3.14*10^8,
3.14储存在前三位元组,而8储存于后一位元组,所以float大致上可以储存的范围为10^38到10^-38(就指数来算出的),而double则
可以大致储存10^308至10^-308之间的数值。 <br>
<br>
C++中还有bool型别,用来表示布林数,在程式中占一个位元组,可以使用true或false <a
 href="LiteralConstant.html">字面常量(Literal constant)</a>
&nbsp;来表示,实际上的数值则分别对应于1与0,可以使用下面这个程式来印证:<br>
<br>
<pre>#include &lt;iostream&gt;<br>using namespace std;<br><br>int main() {<br>    cout &lt;&lt; "sizeof(bool)\t" &lt;&lt; sizeof(bool) &lt;&lt; "\n";<br>    cout &lt;&lt; "sizeof(true)\t" &lt;&lt; sizeof(true) &lt;&lt; "\n";<br>    cout &lt;&lt; "sizeof(false)\t" &lt;&lt; sizeof(false) &lt;&lt; "\n";<br><br>    cout &lt;&lt; "true\t" &lt;&lt; static_cast&lt;int&gt;(true) &lt;&lt; "\n";<br>    cout &lt;&lt; "false\t" &lt;&lt; static_cast&lt;int&gt;(false) &lt;&lt; "\n";<br>    <br>    system("PAUSE");<br>    return 0;<br>}</pre>
<br>
执行结果: <br>
<table style="text-align: left; width: 100%;" border="0" cellpadding="2"
 cellspacing="2">
  <tbody>
    <tr>
      <td style="background-color: rgb(0, 0, 0);"><small><span
 style="color: rgb(255, 255, 255);">sizeof(bool)&nbsp;&nbsp;&nbsp; 1<br>
sizeof(true)&nbsp;&nbsp;&nbsp; &nbsp;1<br>
sizeof(false)&nbsp;&nbsp; &nbsp;1<br>
true&nbsp;&nbsp;&nbsp; 1<br>
false&nbsp;&nbsp; 0</span></small><span
 style="color: rgb(255, 255, 255);"></span></td>
    </tr>
  </tbody>
</table>
<br>
在程式当中使用到static_cast,这是显式型态转换(Explicit type
conversion),将bool型态转型(Cast)为int型态,您可以在 <a
 href="ArithmeticOperator.html">算术运算、型态转换</a> 中看到型态转换的相关说明。<br>
<br>
<br>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -