C语言中各种数据类型长度的总结

<p><br><br><!-- [if !mso]>
<style>
v/:* {behavior:url(#default#VML);}
o/:* {behavior:url(#default#VML);}
w/:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]--><!-- [if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:PunctuationKerning/>
<w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing>
<w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery>
<w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:Compatibility>
<w:SpaceForUL/>
<w:BalanceSingleByteDoubleByteWidth/>
<w:DoNotLeaveBackslashAlone/>
<w:ULTrailSpace/>
<w:DoNotExpandShiftReturn/>
<w:AdjustLineHeightInTable/>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:UseFELayout/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]--><!-- [if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" LatentStyleCount="156">
</w:LatentStyles>
</xml><![endif]--><!-- [if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style>
<![endif]--></p>
<p class="MsoNormal"><span style="">下面是我关于</span>
<span lang="EN-US">C</span>
<span style="">语言中各种数据类型长度的总结:</span>
<span lang="EN-US">(</span>
<span style="">参考</span>
<span lang="EN-US">The C Programming Language)</span>
</p>
<p class="MsoNormal"><span lang="EN-US"></span>
</p>
<p class="MsoNormal"><span lang="EN-US">1. c</span>
<span style="">语言中的整数类型有</span>
<span lang="EN-US">char, short, int, long</span>
<span style="">等几种</span>
<span lang="EN-US">, </span>
<span style="">下面是</span>
<span lang="EN-US">C</span>
<span style="">语言对每种数据类型长度的规定</span>
<span lang="EN-US">:</span>
</p>
<p class="MsoNormal"><span lang="EN-US">(a). short</span>
<span style="">和</span>
<span lang="EN-US">long</span>
<span style="">类型的长度不相同</span>
</p>
<p class="MsoNormal"><span lang="EN-US">(b). int</span>
<span style="">类型通常同具体机器的物理字长相同</span>
</p>
<p class="MsoNormal"><span lang="EN-US">(c). short</span>
<span style="">通常是</span>
<span lang="EN-US">16bits, int</span>
<span style="">通常是</span>
<span lang="EN-US">16bits or 32bits</span>
<span style="">每种编译器可以根据硬件的不同自由确定</span>
<span lang="EN-US">, </span>
<span style="">但是</span>
<span lang="EN-US">short</span>
<span style="">和</span>
<span lang="EN-US">int</span>
<span style="">必须最少是</span>
<span lang="EN-US">16bits, </span>
<span style="">而</span>
<span lang="EN-US">long</span>
<span style="">类型必须最少是</span>
<span lang="EN-US">32bits,
</span>
<span style="">并且</span>
<span lang="EN-US">short</span>
<span style="">必须比</span>
<span lang="EN-US">int</span>
<span style="">和</span>
<span lang="EN-US">long</span>
<span style="">类型要短。</span>
</p>
<p class="MsoNormal"><span lang="EN-US">2. sizeof() </span>
<span style="">运算符返回的是一种数据类型中所包含的字节数</span>
<span lang="EN-US">(bytes), AnsiC</span>
<span style="">规定</span>
<span lang="EN-US">sizeof(char)</span>
<span style="">必须返回</span>
<span lang="EN-US">1</span>
<span style="">,当</span>
<span lang="EN-US">sizeof</span>
<span style="">作用于数组时</span>
<span lang="EN-US">, </span>
<span style="">返回的是数组中所有成员所占的字节数</span>
<span lang="EN-US">(</span>
<span style="">注意并不是数组中成员的个数</span>
<span lang="EN-US">), </span>
<span style="">当</span>
<span lang="EN-US">sizeof()</span>
<span style="">作用于结构体和公用体时</span>
<span lang="EN-US">,</span>
<span style="">返回的不仅仅是数据成员总的字节数</span>
<span lang="EN-US">, </span>
<span style="">还包括编译器为了实现字节对其而填充的那些字节。</span>
</p>
<p class="MsoNormal"><span lang="EN-US"></span>
</p>
<p class="MsoNormal"><span style="">以前写程序也隐隐约约的懂得这些规则,但是一直以为</span>
<span lang="EN-US">char</span>
<span style="">类型必须是</span>
<span lang="EN-US">8bits</span>
<span style="">的,但是最近做了一个嵌入式</span>
<span lang="EN-US">DSP</span>
<span style="">项目,编译器手册上明明写着</span>
<span lang="EN-US">char</span>
<span style="">类型就是</span>
<span lang="EN-US">16bits</span>
<span style="">的,无奈翻出</span>
<span lang="EN-US">"The C Programming
Language"</span>
<span style="">一查才发现</span>
<span lang="EN-US">ANSI C</span>
<span style="">对于</span>
<span lang="EN-US">char</span>
<span style="">类型的长度并没有作硬性规定。以前写程序不太注意数据类型的可移植性</span>
<span lang="EN-US">, </span>
<span style="">这次项目中用到的以前的代码都要重新检查数据类型长度的问题。</span>
</p>
<p class="MsoNormal"><span lang="EN-US"></span>
</p>
<p class="MsoNormal" style="text-align: center;" align="center"><strong><span style="" lang="EN-US">C Data types.</span>
</strong>
</p>
<div class="MsoNormal" style="text-align: center;">
<span style="" lang="EN-US">

<hr size="2"></span>
</div>
<p class="MsoNormal" style="text-align: left;" align="left"><strong><span style="" lang="EN-US">Variable definition</span>
</strong>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="" lang="EN-US">C has a concept of '<em>data types</em>
' which are used to <a href="http://www.space.unibe.ch/comp_doc/c_manual/C/glossary.html#definition">define</a>
a variable before its use. </span>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="" lang="EN-US">The definition of a variable will assign storage for the variable and
define the type of data that will be held in the location. </span>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="" lang="EN-US">So what data types are available? </span>
</p>
<table class="MsoNormalTable" style="width: 80%;" border="1" cellpadding="0"><tbody><tr>
<td style="padding: 0.75pt;">
<p class="MsoNormal" style="text-align: center;" align="center"><span style="" lang="EN-US"><a href="http://www.space.unibe.ch/comp_doc/c_manual/C/CONCEPT/data_types.html#int#int">int</a>
</span>
</p>
</td>
<td style="padding: 0.75pt;">
<p class="MsoNormal" style="text-align: center;" align="center"><span style="" lang="EN-US"><a href="http://www.space.unibe.ch/comp_doc/c_manual/C/CONCEPT/data_types.html#float#float">float</a>
</span>
</p>
</td>
<td style="padding: 0.75pt;">
<p class="MsoNormal" style="text-align: center;" align="center"><span style="" lang="EN-US"><a href="http://www.space.unibe.ch/comp_doc/c_manual/C/CONCEPT/data_types.html#double#double">double</a>
</span>
</p>
</td>
<td style="padding: 0.75pt;">
<p class="MsoNormal" style="text-align: center;" align="center"><span style="" lang="EN-US"><a href="http://www.space.unibe.ch/comp_doc/c_manual/C/CONCEPT/data_types.html#char#char">char</a>
</span>
</p>
</td>
<td style="padding: 0.75pt;">
<p class="MsoNormal" style="text-align: center;" align="center"><span style="" lang="EN-US"><a href="http://www.space.unibe.ch/comp_doc/c_manual/C/SYNTAX/void.html">void</a>
</span>
</p>
</td>
<td style="padding: 0.75pt;">
<p class="MsoNormal" style="text-align: center;" align="center"><span style="" lang="EN-US"><a href="http://www.space.unibe.ch/comp_doc/c_manual/C/SYNTAX/enum.html">enum</a>
</span>
</p>
</td>
</tr></tbody></table>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="" lang="EN-US">Please note that there is not a boolean data type. C does not have the
traditional view about logical comparison, but thats another story. </span>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="" lang="EN-US">Recent C++ compilers do have a <a href="http://www.space.unibe.ch/comp_doc/c_manual/CPLUSPLUS/SYNTAX/bool.html">boolean</a>
datatype. </span>
</p>
<div class="MsoNormal" style="text-align: center;">
<span style="" lang="EN-US">

<hr size="2"></span>
</div>
<p class="MsoNormal" style="text-align: left;" align="left"><a name="int"><strong><span style="" lang="EN-US">int - data type</span>
</strong>
</a>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span><strong><span style="" lang="EN-US">int</span>
</strong>
</span>
<span><span style="" lang="EN-US"> is used to define integer
numbers. </span>
</span>
</p>
<div>

<table class="MsoNormalTable" style="width: 80%;" border="1" cellpadding="0"><tbody><tr>
<td style="padding: 0.75pt;">
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US"></span>
</span>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US"><span> </span>
{</span>
</span>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US"><span> </span>
int Count;</span>
</span>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US"><span> </span>
Count = 5;</span>
</span>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US"><span> </span>
}</span>
</span>
</p>
</td>
</tr></tbody></table>
</div>
<div class="MsoNormal" style="text-align: center;">
<span><span style="" lang="EN-US">

<hr size="2"></span>
</span>
</div>
<p></p>
<p class="MsoNormal" style="text-align: left;" align="left"><a name="float"><strong><span style="" lang="EN-US">float - data type</span>
</strong>
</a>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span><strong><span style="" lang="EN-US">float</span>
</strong>
</span>
<span><span style="" lang="EN-US"> is used to define floating
point numbers. </span>
</span>
</p>
<div>

<table class="MsoNormalTable" style="width: 80%;" border="1" cellpadding="0"><tbody><tr>
<td style="padding: 0.75pt;">
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US"></span>
</span>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US"><span> </span>
{</span>
</span>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US"><span> </span>
float Miles;</span>
</span>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US"><span> </span>
Miles = 5.6;</span>
</span>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US"><span> </span>
}</span>
</span>
</p>
</td>
</tr></tbody></table>
</div>
<div class="MsoNormal" style="text-align: center;">
<span><span style="" lang="EN-US">

<hr size="2"></span>
</span>
</div>
<p></p>
<p class="MsoNormal" style="text-align: left;" align="left"><a name="double"><strong><span style="" lang="EN-US">double - data type</span>
</strong>
</a>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span><strong><span style="" lang="EN-US">double</span>
</strong>
</span>
<span><span style="" lang="EN-US"> is used to define
BIG floating point numbers. It reserves twice the storage for the number. On
PCs this is likely to be 8 bytes. </span>
</span>
</p>
<div>

<table class="MsoNormalTable" style="width: 80%;" border="1" cellpadding="0"><tbody><tr>
<td style="padding: 0.75pt;">
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US"></span>
</span>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US"><span> </span>
{</span>
</span>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US"><span> </span>
double Atoms;</span>
</span>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US"><span> </span>
Atoms = 2500000;</span>
</span>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US"><span> </span>
}</span>
</span>
</p>
</td>
</tr></tbody></table>
</div>
<div class="MsoNormal" style="text-align: center;">
<span><span style="" lang="EN-US">

<hr size="2"></span>
</span>
</div>
<p></p>
<p class="MsoNormal" style="text-align: left;" align="left"><a name="char"><strong><span style="" lang="EN-US">char - data type</span>
</strong>
</a>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span><strong><span style="" lang="EN-US">char</span>
</strong>
</span>
<span><span style="" lang="EN-US"> defines characters. </span>
</span>
</p>
<div>

<table class="MsoNormalTable" style="width: 80%;" border="1" cellpadding="0"><tbody><tr>
<td style="padding: 0.75pt;">
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US"></span>
</span>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US"><span> </span>
{</span>
</span>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US"><span> </span>
char Letter;</span>
</span>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US"><span> </span>
Letter = 'x';</span>
</span>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US"><span> </span>
}</span>
</span>
</p>
</td>
</tr></tbody></table>
</div>
<p></p>
<div class="MsoNormal" style="text-align: center;">
<a name="modifier"><span style="" lang="EN-US">

<hr size="2"></span>
</a>
</div>
<p class="MsoNormal" style="text-align: left;" align="left"><span><strong><span style="" lang="EN-US">Modifiers</span>
</strong>
</span>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US">The three data
types above have the following modifiers. </span>
</span>
</p>
<ul type="disc">
<li class="MsoNormal" style="text-align: left;">
<span><span style="" lang="EN-US">short </span>
</span>
</li>
<li class="MsoNormal" style="text-align: left;">
<span><span style="" lang="EN-US">long </span>
</span>
</li>
<li class="MsoNormal" style="text-align: left;">
<span><span style="" lang="EN-US">signed </span>
</span>
</li>
<li class="MsoNormal" style="text-align: left;">
<span><span style="" lang="EN-US">unsigned </span>
</span>
</li>
</ul>
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US">The modifiers
define the amount of storage allocated to the variable. The amount of storage
allocated is not cast in stone. ANSI has the following rules: </span>
</span>
</p>
<div>

<table class="MsoNormalTable" style="width: 80%;" border="1" cellpadding="0"><tbody><tr>
<td style="padding: 0.75pt;">
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US"></span>
</span>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US"><span> </span>
short int <=<span> </span>
int <= long int</span>
</span>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US"><span> </span>
float <= double <= long
double</span>
</span>
</p>
</td>
</tr></tbody></table>
</div>
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US">What this means is that a 'short int' should assign
less than or the same amount of storage as an 'int' and the 'int' should be
less or the same bytes than a 'long int'. What this means in the real world is:
</span>
</span>
</p>
<table class="MsoNormalTable" style="width: 100%;" border="1" cellpadding="0"><tbody>
<tr>
<td style="padding: 0.75pt;">
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US"></span>
</span>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US"><span> </span>
Type<span> </span>
Bytes<span>
</span>
Bits<span> </span>
Range</span>
</span>
</p>
</td>
</tr>
<tr>
<td style="padding: 0.75pt;">
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US"></span>
</span>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US"><span> </span>
short int<span> </span>
2<span>
</span>
16<span> </span>
-32,768 ->
+32,767<span> </span>
(32kb)</span>
</span>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US"><span> </span>
unsigned short int<span> </span>
2<span>
</span>
16<span> </span>
0 ->
+65,535<span> </span>
(64Kb)</span>
</span>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US"><span> </span>
unsigned int<span> </span>
4<span>
</span>
32<span> </span>
0 ->
+4,294,967,295<span> </span>
( 4Gb)</span>
</span>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US"><span> </span>
int<span> </span>
4<span>
</span>
32<span> </span>
-2,147,483,648 ->
+2,147,483,647<span> </span>
( 2Gb)</span>
</span>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US"><span> </span>
long int<span> </span>
4<span>
</span>
32<span> </span>
-2,147,483,648 ->
+2,147,483,647<span> </span>
( 2Gb)</span>
</span>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US"><span> </span>
signed char<span> </span>
1<span>
</span>
8<span> </span>
-128 -> +127</span>
</span>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US"><span> </span>
unsigned char<span> </span>
1<span>
</span>
8<span> </span>
0 -> +255</span>
</span>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US"><span> </span>
float<span> </span>
4<span>
</span>
32</span>
</span>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US"><span> </span>
double<span> </span>
8<span>
</span>
64</span>
</span>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US"><span> </span>
long double<span> </span>
12<span>
</span>
96</span>
</span>
</p>
</td>
</tr>
</tbody></table>
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US">These figures only apply to todays generation of PCs.
Mainframes and midrange machines could use different figures, but would still
comply with the rule above. </span>
</span>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span><span style="" lang="EN-US">You can find out how much storage is allocated to a
data type by using the </span>
</span>
<span style="" lang="EN-US"><a href="http://www.space.unibe.ch/comp_doc/c_manual/C/SYNTAX/sizeof.html">sizeof</a>
operator.</span>
</p>
<p class="MsoNormal"><span lang="EN-US"></span>
</p>
<p></p>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值