引言
我們知道一個變數的創建是需要在記憶體中開辟空間的,空間的大小是根據不同的型別而定的,可是資料在所開辟的記憶體中到底是如何存盤的呢?
例如:
int a = 20;
我們只知道為 a分配了四個位元組大小的空間,并不知道其內部到底如何存盤,
下面我們就來了解一下:
整型在記憶體中的存盤
資料在記憶體中以二進制的形式存盤,
整數二進制有3種表示形式:原碼、補碼、反碼,三種表示方法均有符號位和數值位兩部分,符號位都是用0表示“正”,用1表示“負”,而數值位三種表示方法各不相同,
原碼:按照資料的數值直接寫出的二進制序列就是原碼,
反碼:原碼的符號位不變,其他為按位取反,得到的就是反碼,
補碼:反碼加1,就得到補碼,
對于整數來說:
正整數的原碼、反碼、補碼相同;負整數的原碼、反碼、補碼需要進行計算得到,
資料存放記憶體中其實存放的是補碼,這是為什么呢?原因在于,使用補碼,可以將符號位和數值域統一處理;同時,加法和減法也可以統一處理(CPU只有加法器)此外,補碼和原碼相互轉換,其運算程序是相同的,不需要額外的硬體電路,
用下面的程式來看看記憶體中的存盤:

我們可以看到對于a存盤的補碼,但是發現順序有點不對勁,這又是為什么呢?
在這里,我們又將引入大小端存盤模式的介紹:
大端存盤模式:資料的低位保存在記憶體的高地址處,而資料的高位保存在記憶體的低地址處,
小端存盤模式:資料的低位保存在記憶體的低地址處,而資料的高位保存在記憶體的高地址處,
由此可以判斷,上述機器的位元組序是小端存盤模式,
在這里,通過對大小端位元組序的理解,設計一個小程式來判斷當前機器的位元組序,程式如下:

通過以上對整型在記憶體中的存盤的理解,下面我們通過幾個練習來給大家鞏固一下:







可分析,因為定義的i為無符號的char,所以i的取值范圍為0~255;故在for回圈的判斷條件中,一直成立,所以該程式的輸出結果是死回圈,

同上題一樣,因為定義的i是無符號整型,所以i永遠大于等于0,故在for回圈中,判斷條件永遠成立,該程式輸出結果是死回圈,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/291236.html
標籤:其他
