📄 datatype.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 <iostream><br>using namespace std; <br><br>int main() { <br> cout << "\n型态\t大小(bytes)"; <br> cout << "\nint\t" << sizeof(int); <br> cout << "\nlong\t" << sizeof(long); <br> cout << "\nfloat\t" << sizeof(float); <br> cout << "\ndouble\t" << sizeof(double); <br> cout << "\nchar\t" << sizeof(char);<br> cout << "\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);">型态 大小(bytes)</span><br
style="color: rgb(255, 255, 255);">
<span style="color: rgb(255, 255, 255);">int
4</span><br style="color: rgb(255, 255, 255);">
<span style="color: rgb(255, 255, 255);">long
4</span><br style="color: rgb(255, 255, 255);">
<span style="color: rgb(255, 255, 255);">float
4</span><br style="color: rgb(255, 255, 255);">
<span style="color: rgb(255, 255, 255);">double 8</span><br
style="color: rgb(255, 255, 255);">
<span style="color: rgb(255, 255, 255);">char
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>
来表示,实际上的数值则分别对应于1与0,可以使用下面这个程式来印证:<br>
<br>
<pre>#include <iostream><br>using namespace std;<br><br>int main() {<br> cout << "sizeof(bool)\t" << sizeof(bool) << "\n";<br> cout << "sizeof(true)\t" << sizeof(true) << "\n";<br> cout << "sizeof(false)\t" << sizeof(false) << "\n";<br><br> cout << "true\t" << static_cast<int>(true) << "\n";<br> cout << "false\t" << static_cast<int>(false) << "\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) 1<br>
sizeof(true) 1<br>
sizeof(false) 1<br>
true 1<br>
false 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 + -