c語言 零碎知識點
- Endian 指的是存儲字節(jié)的順序罗捎。
- 兩種常用的字節(jié)排序:Little-Endian和Big-Endian
Little-Endian
如果多字節(jié)的最低有效字節(jié)首先存儲在最低的存儲器地址處琅豆,那么硬件被稱為小端。
例子:小端存儲0x44332211
地址:---------- MEMORY BYTES ----------
100:00 11 22 33 44 00 00 00 00 00 ...
Big-Endian
如果多字節(jié)的最高有效字節(jié)首先存儲在最低的存儲器地址處,那么硬件被稱為大端闷愤。
例子:大端存儲0x44332211
地址:---------- MEMORY BYTES ----------
100:00 44 33 22 11 00 00 00 00 00 ...
多字節(jié)和單字節(jié)的區(qū)別
單字節(jié)數(shù)據(jù)不受Endianness的影響绞旅。(類似于大端)
如字符串'abcd',起始字符'a'存儲在最低的內(nèi)存位置村象。
例子:‘a(chǎn)bcd’
地址:---------- MEMORY BYTES ---------- --- ASCII字符---
100:00 61 62 63 64 00 00 00 00 00 ... .abcd ....
代碼檢測大小端
int checkIsLittleEndian
{
int i = 0x12345678;
char *c = &i;
return ((c[0] == 0x78) && (c[1] == 0x56) && (c[2] == 0x34) && (c[3] == 0x12));
}
幾種不常用的打印
o:無符號8進制(octal)整數(shù)(不輸出前綴0)
-
x/X:無符號16進制整數(shù),x對應(yīng)的是abcdef鹅很,X對應(yīng)的是ABCDEF(不輸出前綴0x)
printf("0x%x 0x%X",123,123);輸出0x7b 0x7B
-
e/E:科學(xué)計數(shù)法嘶居,使用指數(shù)(Exponent)表示浮點數(shù)
printf("%e %E",0.000000123,0.000000123); 輸出 1.230000e-07 1.230000E-07
-
p:以16進制形式輸出指針
printf("%p","lvlv");輸出:0x103e6f45d
基本數(shù)據(jù)類型在內(nèi)存中的存儲形式
整數(shù)類型 在內(nèi)存中以補碼的形式存在,對于一個正整數(shù)來說促煮,它的補碼是它的原碼本身邮屁;對于一個負數(shù)來說,它的補碼是它的原碼取反加1.
-
浮點類型 在計算機中以二進制的形式存儲
例如:12.565 整數(shù)部分:1100 小數(shù)部分:0.565*2=1.130得小數(shù)點后第一位為1污茵,0.13*2=0.26得小數(shù)點第二位為0樱报,0.26*2=0.52得第三位為0;0.52*2=1.04得第四位為1泞当,以此類推迹蛤。
字符型 把字符的相對應(yīng)的ASCII放到存儲單元中,而這些ASCII代碼值在計算機中以二進制的形式存放的襟士。