天天看點

整型資料在記憶體中如何存儲?

(以下讨論,針對32位的計算機系統。。)

  問:int型資料占幾個位元組?答:4位元組。地球上這個群體的人都知道。

  再問:這4個位元組,即32個二進制位,又是何存儲?這就進入計算機的“底層”了。這個事情,學習程式設計的童鞋,可以懂。

  存儲的方式,和我們拍腦袋想得不太一樣,概括一下,就是低位在前,高位在後。

  本文直覺一些,看懂以下程式中資料的存儲,也便知道這個安排。

整型資料在記憶體中如何存儲?

(源程式,及在watch視窗中用多種方式看x.c的方法,見文後附件。)

  在程式中,由于聯合體存儲的特點,變量x占4個位元組。我們可以從3個角度觀察這4個位元組:(1) 整體看,是一個int型資料;(2) 分成2部分看,是兩個短整型資料;(3) 分成4部分看,是4個單位元組的資料。

  但無論怎麼看,就是這4個位元組。無論用哪種形式操作資料,使用的也就是這4個位元組。聯合體為我們提供了從不同的角度使用這4個位元組的方式。

  x.c[0]到x.c[3]的值分别為65\66\67\68,這好了解。

  x.si[0]占的2位元組,與x.c[0]和x.c[1]相同。驗證一下:16961=66×256+65(66是’b’的acsii值,65是’a’的ascii值,是字元的存儲形式)。注意,這裡展現存儲資料時低位在前,高位在後,低位是65,高位是66。正如十進制數98中,高位是9,低位是8,是以98=9×10+8一樣。因為是高位,是以乘以位權10,表示9這個符号代表的其實是90。66×256,是因為存儲66(‘b’)的那一個位元組的位置,比存儲65(‘a’)的那一個位元組的位置高8位,是以乘以2的8次方,即256。

  概括講,存儲2位元組的16961時,其低8位,是65,在前(x.c[0]),而其高8位,是66,在後(x.c[1])。低位在前,高位在後。

  請自行驗證:17475=68×256+67,展現低位在前,高位在後。(x.si[0]占的2位元組,與x.c[2]和x.c[3]相同)

  再請驗證:1145258561=17475×256×256+16961,也展現低位在前,高位在後。(x.i占的4位元組,與x.si[0]和x.si[1]相同)

  再請驗證:1145258561=68×256×256×256+67×256×256+66×256+65。同樣的道理。

  換種寫法,是1145258561=(((68×256+67)×256+66)×256+65。

  再看截圖,品味低位在前,高位在後。

  這樣安排的道理,在以後的關于“計算機的原理”的有關專業課中會接觸到。

附1:本文源程式

附2:在watch視窗中用多種方式看x.c的方法

  在watch視窗中,除自動顯示的局部變量的值,還可以自行輸入表達式跟蹤。

  方法是,直接在表格中寫下表達式,如圖中,x.c,其他任意。

  輸入表達式後,在上面點右鍵,會有幾個選項,點properties…(屬性),然後就是如下的視窗:

  

整型資料在記憶體中如何存儲?

  任性地多角度觀察吧!