整型數(shù)據(jù)在內(nèi)存中存儲(chǔ)方式的講解
(以下討論,針對(duì)32位的計(jì)算機(jī)系統(tǒng)。。)
問:int型數(shù)據(jù)占幾個(gè)字節(jié)?答:4字節(jié)。地球上這個(gè)群體的人都知道。
再問:這4個(gè)字節(jié),即32個(gè)二進(jìn)制位,又是何存儲(chǔ)?這就進(jìn)入計(jì)算機(jī)的“底層”了。這個(gè)事情,學(xué)習(xí)程序設(shè)計(jì)的童鞋,可以懂。
存儲(chǔ)的方式,和我們拍腦袋想得不太一樣,概括一下,就是低位在前,高位在后。
本文直觀一些,看懂以下程序中數(shù)據(jù)的存儲(chǔ),也便知道這個(gè)安排。
(源程序,及在watch窗口中用多種方式看x.c的方法,見文后附件。)
在程序中,由于聯(lián)合體存儲(chǔ)的特點(diǎn),變量x占4個(gè)字節(jié)。我們可以從3個(gè)角度觀察這4個(gè)字節(jié):(1) 整體看,是一個(gè)int型數(shù)據(jù);(2) 分成2部分看,是兩個(gè)短整型數(shù)據(jù);(3) 分成4部分看,是4個(gè)單字節(jié)的數(shù)據(jù)。
但無(wú)論怎么看,就是這4個(gè)字節(jié)。無(wú)論用哪種形式操作數(shù)據(jù),使用的也就是這4個(gè)字節(jié)。聯(lián)合體為我們提供了從不同的角度使用這4個(gè)字節(jié)的方式。
x.c[0]到x.c[3]的值分別為65\66\67\68,這好理解。
x.si[0]占的2字節(jié),與x.c[0]和x.c[1]相同。驗(yàn)證一下:16961=66×256+65(66是'B'的ACSII值,65是'A'的ASCII值,是字符的存儲(chǔ)形式)。注意,這里體現(xiàn)存儲(chǔ)數(shù)據(jù)時(shí)低位在前,高位在后,低位是65,高位是66。正如十進(jìn)制數(shù)98中,高位是9,低位是8,所以98=9×10+8一樣。因?yàn)槭歉呶唬猿艘晕粰?quán)10,表示9這個(gè)符號(hào)代表的其實(shí)是90。66×256,是因?yàn)榇鎯?chǔ)66(‘B')的那一個(gè)字節(jié)的位置,比存儲(chǔ)65(‘A')的那一個(gè)字節(jié)的位置高8位,所以乘以2的8次方,即256。
概括講,存儲(chǔ)2字節(jié)的16961時(shí),其低8位,是65,在前(x.c[0]),而其高8位,是66,在后(x.c[1])。低位在前,高位在后。
請(qǐng)自行驗(yàn)證:17475=68×256+67,體現(xiàn)低位在前,高位在后。(x.si[0]占的2字節(jié),與x.c[2]和x.c[3]相同)
再請(qǐng)驗(yàn)證:1145258561=17475×256×256+16961,也體現(xiàn)低位在前,高位在后。(x.i占的4字節(jié),與x.si[0]和x.si[1]相同)
再請(qǐng)驗(yàn)證:1145258561=68×256×256×256+67×256×256+66×256+65。同樣的道理。
換種寫法,是1145258561=(((68×256+67)×256+66)×256+65。
再看截圖,品味低位在前,高位在后。
這樣安排的道理,在以后的關(guān)于“計(jì)算機(jī)的原理”的有關(guān)專業(yè)課中會(huì)接觸到。
附1:本文源程序
#include <iostream> using namespace std; union un { int i; short int si[2]; char c[4]; }; int main() { union un x; x.c[0]='A'; x.c[1]='B'; x.c[2]='C'; x.c[3]='D'; cout<< x.c[0]<<","<<x.c[1]<<","<< x.c[2]<<","<< x.c[3]<<endl; cout<<x.si[0]<<","<< x.si[1]<<endl; cout<<x.i<<endl; return 0; }
附2:在watch窗口中用多種方式看x.c的方法
在watch窗口中,除自動(dòng)顯示的局部變量的值,還可以自行輸入表達(dá)式跟蹤。
方法是,直接在表格中寫下表達(dá)式,如圖中,x.c,其他任意。
輸入表達(dá)式后,在上面點(diǎn)右鍵,會(huì)有幾個(gè)選項(xiàng),點(diǎn)properties…(屬性),然后就是如下的窗口:
任性地多角度觀察吧!
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)我們的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
上一篇:C++實(shí)踐IP地址類項(xiàng)目參考
欄 目:C語(yǔ)言
下一篇:C語(yǔ)言實(shí)現(xiàn)學(xué)生選課系統(tǒng)
本文標(biāo)題:整型數(shù)據(jù)在內(nèi)存中存儲(chǔ)方式的講解
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/436.html
您可能感興趣的文章
- 04-02func函數(shù)+在C語(yǔ)言 func函數(shù)在c語(yǔ)言中
- 04-02C語(yǔ)言中怎么打出三角函數(shù) c語(yǔ)言中怎么打出三角函數(shù)的值
- 01-10數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)- 解析最少換車次數(shù)的問題詳解
- 01-10數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-用棧實(shí)現(xiàn)表達(dá)式求值的方法詳解
- 01-10APUE筆記之:進(jìn)程環(huán)境詳解
- 01-10c++中inline的用法分析
- 01-10深入理解堆排序及其分析
- 01-10深入C/C++浮點(diǎn)數(shù)在內(nèi)存中的存儲(chǔ)方式詳解
- 01-10深入解析Linux下\r\n的問題
- 01-10基于getline()函數(shù)的深入理解


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 04-02c語(yǔ)言函數(shù)調(diào)用后清空內(nèi)存 c語(yǔ)言調(diào)用
- 04-02func函數(shù)+在C語(yǔ)言 func函數(shù)在c語(yǔ)言中
- 04-02c語(yǔ)言的正則匹配函數(shù) c語(yǔ)言正則表達(dá)
- 04-02c語(yǔ)言用函數(shù)寫分段 用c語(yǔ)言表示分段
- 04-02c語(yǔ)言中對(duì)數(shù)函數(shù)的表達(dá)式 c語(yǔ)言中對(duì)
- 04-02c語(yǔ)言編寫函數(shù)冒泡排序 c語(yǔ)言冒泡排
- 04-02c語(yǔ)言沒有round函數(shù) round c語(yǔ)言
- 04-02c語(yǔ)言分段函數(shù)怎么求 用c語(yǔ)言求分段
- 04-02C語(yǔ)言中怎么打出三角函數(shù) c語(yǔ)言中怎
- 04-02c語(yǔ)言調(diào)用函數(shù)求fibo C語(yǔ)言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 04-02jquery與jsp,用jquery
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 01-10delphi制作wav文件的方法
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?