1. 資料型別詳細介紹
2. 整形在記憶體中的儲存:原碼、反碼、補碼
3. 大小端位元組序介紹及判斷
4. 浮點型在記憶體中的儲存解析
1.整形家族
char
unsigned char
signed char
short
unsigned short [int]
signed short [int]
intunsigned int
signed int
long
unsigned long [int]
signed long [int]
2.浮點型家族float
double
3.構造型別陣列型別
結構體型別 struct
列舉型別 enum
聯合型別 union
4.指標型別int pi;
char pc;
float pf;
void pv;
5.空型別void 表示空型別(無型別)
通常應用於函式的返回型別、函式的引數、指標型別
計算機中的有符號數有三種表示方法,即原碼、反碼和補碼。
三種表示方法均有符號位和數值位兩部分,符號位都是用0表示「正」,用1表示「負」,而數值位
三種表示方法各不相同。
原碼:直接將二進位制按照正負數的形式翻譯成二進位制就可以。
反碼:將原碼的符號位不變,其他位依次按位取反就可以得到了。
**如下:
#define _crt_secure_no_warnings 1
#include
int main()
//00000000 00000000 00000000 00010100 20的補碼
//100000000 00000000 00000000 00001010 程式設計客棧 兩者相加,因為int只有32位丟掉最前面的
1程式設計客棧.大端小端的概念
大端(儲存)模式,是指資料的低位儲存在記憶體的高位址中,而資料的高位,儲存在記憶體的低位址中;
小端(儲存)模式,是指資料的低位儲存在記憶體的低位址中,而資料的高位,,儲存在記憶體的高位址中。
2.大小端位元組序的由來為什麼會有大小端模式之分呢?這是因為在計算機系統中,我們是以位元組為單位的,每個位址單元都對應著乙個位元組,乙個位元組為8bit。但是在c語言中除了8bit的char之外,還有16bit的short型,32bit的long型(要看具體的編譯器),另外,對於位數大於8位的處理器,例如16位或者32位的處理器,由於暫存器寬度大於乙個位元組,那麼必然存在著乙個如果將多個位元組安排的問題。因此就導致了大端儲存模式和小端儲存模式。
例如乙個 16bit 的 short 型 x ,在記憶體中的位址為 0x0010 , x 的值為 0x1122 ,那麼 0x11 為高位元組, 0x22為低位元組。對於大端模式,就將 0x11 放在低位址中,即 0x0010 中, 0x22 www.cppcns.com放在高位址中,即 0x0011 中。小端模式,剛好相反。我們常用的 x86 結構是小端模式,而 keil c51 則為大端模式。很多的arm,dsp都為小端模式。有些arm處理器還可以由硬體來選擇是大端模式還是小端模式。
3.判斷系統是大端還是小端
**如下:
#define _crt_secure_no_warnings 1
#include
int findkey(int i)
int main()
else
return 0;
}**如下:
#define _crt_secure_no_warnings 1
#include
int main()
//11111111 11111111 11111111 11111111 -1的補碼,所以原碼為-1
//對於unsigned char來說 11111111 中1不是符號位所以高位補0
//00000000 00000000 00000000 11111111 所以為正數,原、反、補相同為255
**如下:
int main()
//11111111 11111111 11111111 10000000 128的補碼
//因為a是字元型別,所以發生截斷 10000000 a的值
//%u是列印無符號整形,所以發成整形提公升
//11111111 11111111 11111111 10000000
//%u是無符號整形,所以原碼、反碼、補碼相同
**如下:
int main()
//01111111 11111111 11111111 10000000 128的補碼
//因為a是char型別,所以發生截斷 10000000 -a
//%u是列印無符號整形,所以發生整形提公升,因為是char型別,所以高位是符號位
//11111111 11111111 11111111 100000000
//%u是無符號整形,所以原碼、反碼、補碼相同
**如下:
int main()
//00000000 00000000 00000000 00001010 10的原碼、反碼、補碼
//11111111 11111111 11111111 11110110 相加為補碼
//11111111 11111111 11111111 11110101 反碼
//10000000 00000000 00000000 00001010 補碼 為-10www.cppcns.com
**如下:
#define _crt_secure_no_warnings 1
#include
#include
int main()
return 0;
}**如下:
#define _crt_secure_no_warnings 1
#include
#include
int main()
return 0;
}**如下:
unsigned char i = 0;
int main()
return 0;
}根據國際標準ieee(電氣和電子工程協會) 754,任意乙個二進位制浮點數v可以表示成下面的形式:
1.(-1)^s * m * 2^e
(-1)^s表示符號位,當s=0,v為正數;當s=1,v為負數。
2.m表示有效數字,大於等於1,小於2。
3.2^e表示指數字。
舉例來說: 十進位制的5.0,寫成二進位制是 101.0 ,相當於 1.012^2 。 那麼,按照上面v的格式,可以得出s=0,m=1.01,e=2。
十進位制的-5.0,寫成二進位制是 -101.0 ,相當於 -1.012^2 。那麼,s=1,m=1.01,e=2。
ieee 754規定: 對於32位的浮點數,最高的1位是符號位s,接著的8位是指數e,剩下的23位為有效數字m
**如下:
#define _crt_secure_no_warnings 1
#include
int main()
以上就是今天要講的內容,本文僅僅簡單介紹了資料整形和浮點型在記憶體中的儲存,了解這個更能令我們了解資料怎麼在記憶體中儲存。另外,如果上述有任何問題,請懂哥指教,不過沒關係,主要是自己能堅持,更希望有一起學習的同學可以幫我指正,但是如果可以請溫柔一點跟我講,愛與和平是永遠的主題,愛各位了。
C語言 資料在記憶體中的儲存
字元型資料 1.字元與字元 把字元的相對應的ascii碼 整數,對映關係見ascii碼表 放到儲存碼單元中,而這些ascii 值在計算機中同樣以二進位制補碼的形式存放的。2.字元變數 字元型資料的儲存空間和值的範圍 32位操作平台 型別位元組數 取值範圍 signed char 有符號字元數 1 2...
資料在記憶體中的儲存c語言
基本內建型別 char 字元資料型別 short 短整型 int 整形 long 長整型 long long 更長的整形 float 單精度浮點數 double 雙精度浮點數使用這個型別開闢的記憶體空間大小 大小決定了適用範圍 如何看待記憶體空間的視角。在32位平台下,任何指標型別都只佔4個位元組。...
C語言 資料在記憶體中的儲存
得從整形在記憶體中的儲存說起 計算機中的有符號數有三種表示方法,即原碼 反碼和補碼。三種表示方法均有符號位和數值位兩部分,符號位都是用0表示 正 用1表示 負 而數值位三種表示方法各不相同。原碼直接將二進位制按照正負數的形式翻譯成二進位制就可以。反碼將原碼的符號位不變,其他位依次按位取反就可以得到了...