字元型資料
1.字元與字元**
把字元的相對應的ascii碼(整數,對映關係見ascii碼表)放到儲存碼單元中,而這些ascii**值在計算機中同樣以二進位制補碼的形式存放的。
2.字元變數
字元型資料的儲存空間和值的範圍(32位操作平台)
型別位元組數
取值範圍
signed char(有符號字元數)
1-2^7 ~ (2^7-1)
unsigned char(無符號字元數)
10~(2^8-1)
整形資料
整形資料的儲存空間和值的範圍 (32操作平台)
型別位元組數
取值範圍
int(整形)
4-2^31 ~ (2^31-1)
unsigned int(無符號整形)
40 ~ (2^32-1)
short(短整型)
2-2^15 ~ (2^15-1)
unsigned short(無符號短整型)
20 ~ (2^16-1)
long(長整型)
4-2^31 ~ (2^31-1)
unsigned long(無符號長整形)
40 ~ (2^32-1)
long long(雙長整型)
8-2^63 ~ (2^63-1)
unsigned long long(無符號雙長整型)
80 ~ (2^64-1)
浮點型資料
構造型別float型(單精度浮點型)//4個位元組
double型(雙精度浮點型)//8個位元組
指標型別>陣列型別 array
>結構體型別 struct
>列舉型別 enum
>聯合型別 union
空型別int
*pr //指向整形資料,只能儲存整形資料的位址
char
*pc //指向字元型資料,只能儲存字元型資料的位址
float
*pf //指向浮點型資料,只能儲存浮點型資料的位址
void
*pv //可以儲存位址,不能用來運算
void表示空型別(無型別)
通常應用於函式的返回型別,函式的引數,指標型別。
1. 乙個變數的建立是要在記憶體中開闢空間的。空間的大小是根據不同的型別而決定的。
計算機中的有符號數有三種表示方法,即原碼、反碼和補碼。
三種表示方法均有符號位和數值位兩部分,符號位都是用0表示「正」,用1表示「負」,而數值位三種表示方法各不相同。
原碼
直接將二進位制按照正負數的形式翻譯成二進位制就可以。
反碼
將原碼的符號位不變,其他位依次按位取反就可以得到了。
補碼
反碼+1就得到補碼。
正數的原、反、補碼都相同。
對於整形來說:資料存放記憶體中其實存放的是補碼。
在計算機系統中,數值一律用補碼來表示和儲存。原因在於,使用補碼,可以將符號位和數值域統一處理; 同 時,加法和減法也可以統一處理(cpu只有加法器)此外,補碼與原碼相互轉換,其運算過程是相同的,不需 要額外的硬體電路。
2.資料儲存和讀取的差別
小結:%d %u 列印char 資料#include
intmain()
a、整形提公升補0 還是1,取決於當前變數的型別和最高位1還是0
b、提公升之後是否求原始碼,取決於他是什麼型別的?
unsigned int ->原碼印char 資料
根據國際標準ieee(電氣和電子工程協會) 754,任意乙個二進位制浮點數v可以表示成下面的形式:
ieee 754規定:對於32位浮點數,最高的1位是符號位s,接著的8位是指數e,剩下的23位為有效數字m例如: 十進位制的5.0,寫成二進位制是 101.0 ,相當於 1.01×2
^2 。 那麼,按照上面v的格式,可以得出s=
0, m=
1.01,e=
2。十進位制的-
5.0,寫成二進位制是-
101.0,相當於-
1.01×2
^2 。那麼,s=
1,m=
1.01,e=
2。

有效數字m和指數e,還有一些特別規定。
前面說過, 1≤m<2 ,也就是說,m可以寫成 1.******的形式,其中******表示小數部分.在計算機內部儲存m時,預設這個數的第一位總是1,因此可以被捨去,只儲存後面的******部分。比如儲存1.01的時候,只儲存01,等到讀取的時候,再把第一位的1加上去。這樣做的目的,是節省1位有效數字。以32位浮點數為例,留給m只有23位,將第一位的1捨去以後,等於可以儲存24位有效數字。
至於指數e
首先,e為乙個無符號整數(unsignedint) 這意味著,如果e為8位,它的取值範圍為0 ~ 255;如果e為11位,它的取值範圍為0~2047。但是,我們知道,科學計數法 中的e是可以出現負數的,存入記憶體時e的真實值必須再加上乙個中間數,對於8位的e, 這個中間數是127;對於11位的e,這個中間數是1023。比如:2^10的e是10,所以儲存成32位浮點數時,必須儲存成10+127=137,即10001001。
總結
存時浮點數+127,取時浮點數-127
指數e還可以再分成三種情況:
1.e不全為0或不全為1
這時,浮點數就採用下面的規則表示,即指數e的計算值減去127(或1023),得到真實值,再將有效數字m加上第一位的1。 比如: 0.5(1/2)的二進位制形式為0.1,由於規定正數部分必須為1,即將小數點右移1位,則1.0*2^(-1),其階碼為-1+127=126,表示為01111110,而尾數1.0去掉整數部分為0,補齊0到23位00000000000000000000000,則其二進位制表示形式為:
2.e全為0(浮點數的0值,不能直接與0比較)這時,浮點數的指數e等於1-127(或者1-1023)即為真實值, 有效數字m不再加上第一位的1,而是還原0.******的小數。這樣做是為了表示±0,以及接近於0的很小的數字。0
01111110
00000000000000000000000
3.e全為1(s為0,e全為1,則為float表示的最大正數)
這時,如果有效數字m全為0,表示±無窮大(正負取決於符號位s);
補充
#include
intmain()
for(i=
0;i <
10;i++)if
(f>=
-0.000001
&& f <=
0.000001
)//浮點數與0的比較
return0;
}
資料在記憶體中的儲存c語言
基本內建型別 char 字元資料型別 short 短整型 int 整形 long 長整型 long long 更長的整形 float 單精度浮點數 double 雙精度浮點數使用這個型別開闢的記憶體空間大小 大小決定了適用範圍 如何看待記憶體空間的視角。在32位平台下,任何指標型別都只佔4個位元組。...
C語言 資料在記憶體中的儲存
得從整形在記憶體中的儲存說起 計算機中的有符號數有三種表示方法,即原碼 反碼和補碼。三種表示方法均有符號位和數值位兩部分,符號位都是用0表示 正 用1表示 負 而數值位三種表示方法各不相同。原碼直接將二進位制按照正負數的形式翻譯成二進位制就可以。反碼將原碼的符號位不變,其他位依次按位取反就可以得到了...
C語言 資料在記憶體中的儲存
char 字元資料型別 1個位元組 short 短整型 2個位元組 int 整型 4個位元組 long 長整型 4個位元組 long long 更長的整型 8個位元組 float 單精度浮點型 4個位元組 double 雙精度浮點型 8個位元組1,使用這個型別開闢記憶體空間的大小 2,如何看待記憶體...