目錄
- 前言
- 整型資料的存盤形式
- 大小端存盤
- 結語
前言
海上明月共潮生,
千里相思隨云去,
遙寄祝福千萬縷,
化作春風入夢里,
十五的月亮圓又圓,家家戶戶喜連連,
中秋佳節,祝各位節日快樂、幸福美滿!
回到正題,在學習C語言編程的時候,我們都知道常見的資料型別有很多種,而其中常見的數值型別又分為兩類:整型和浮點型,關于這兩種型別的資料,在記憶體中的存盤格式是不一樣的,今天我們重點來看看整型資料在記憶體中的存盤形式,
整型資料的存盤形式
整型資料的存盤,指的是整型家族,其中包括字符型、短整型、整型、長整型等,
字符型別的資料在存盤的時候,會以字符對應的的ASCII碼值來進行存盤,
想要了解整型資料在記憶體中的存盤,我們就需要了解三個名詞:原碼、反碼、補碼,
而所有的整型資料,在記憶體中存盤,都是以補碼的形式來進行存放的,
原碼:直接將原資料按照正負數的形式翻譯成二進制就可以,
反碼:將原碼的符號位不變,其他位依次按位取反就可以得到了,
補碼:反碼+1就得到補碼,
(補充:整型的正負數形式是指最高位為符號位,其余的位用于表示數值,符號位為1表示負數,符號位為0表示整數)
為什么要以補碼的形式來存放呢?
原因在于,使用補碼,可以將符號位和數值域統一處理;
同時,加法和減法也可以統一處理(CPU只有加法器)此外,補碼與原碼相互轉換,其運算程序是相同的,不需要額外的硬體電路,
我們可以看看整型資料在記憶體中的存盤

這些資料都是以十六進制的補碼形式存放的,
大小端存盤
但是,我們可以發現上圖變數a的存盤順序有點不對勁,
為什么不是以十六進制的 00 00 00 14的形式來存盤,而是14 00 00 00呢?
這里就涉及到大小端存盤的概念了,
什么大端小端:
大端(存盤)模式,是指資料的低位保存在記憶體的高地址中,而資料的高位,保存在記憶體的低地址中;
小端(存盤)模式,是指資料的低位保存在記憶體的低地址中,而資料的高位,,保存在記憶體的高地址中,
例如:一個 16bit 的 short 型 x ,在記憶體中的地址為 0x0010 , x 的值為 0x1122 ,那么 0x11 為高位元組, 0x22 為低位元組,對于大端模式,就將 0x11 放在低地址中,即 0x0010 中, 0x22 放在高地址中,即 0x0011 中,小端模式,剛好相反,

為什么會有大小端模式之分呢?
這是因為在計算機系統中,我們是以位元組為單位的,每個地址單元都對應著一個位元組,一個位元組為8 bit,但是,我們又許多資料型別是大于一個位元組的,那么就必然會存在一個如何將多位元組安排的問題,
如何判斷大小端呢?
我們可以通過下面代碼來判斷,
//判讀大小端存盤
#include<stdio.h>
int main()
{
int n = 1;
char* p = 0;//將n的地址強制轉化為char*,這樣對指標p解參考的時候就只會訪問n變數的第一個位元組
p = (char*)&n;
if (1 == *p)
printf("小端\n");
else
printf("大端\n");
return 0;
}
好啦,今天的內容到這里基本上就結束啦,
結語
再次祝大家中秋快樂!
創作不易呀,看在我中秋佳節還這么勤奮的寫博客的份上,就給我點個贊、評個論吧,如果還能給我點個關注,那就是對我最大的支持了~

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/302006.html
標籤:其他
