1、介紹數(shù)據(jù)
在定義變量時需要指定變量的類型。常量也是區(qū)分類型的。因?yàn)閿?shù)據(jù)都是存放在內(nèi)存中的單元中的,它 是具體存在的,而存儲單元是有限制大小字節(jié)的,每一個存儲單元存放數(shù)據(jù)的范圍是有限的。所以必須對數(shù)據(jù)分配儲存單元的安排,包括儲存單元的長度(占用字節(jié)數(shù))以及數(shù)據(jù)存儲的形式,不同類型的存儲。也是為了方便編程人員對數(shù)據(jù)進(jìn)行操作,不然一堆數(shù)據(jù)放下來,都不知道哪個是哪個,這樣分類了之后大大提升了編程效率。
2、 整型類型
基本整型 int :
編譯系統(tǒng)一般會分配2個或4個字節(jié)(具體是看編譯環(huán)境),1個字節(jié)(8個二進(jìn)位),整數(shù)是以補(bǔ)碼的形式存放在儲存單元中的。如 5:二進(jìn)制是101;如果用兩個字節(jié)存放 正數(shù)的補(bǔ)碼和源碼都是:0000 0000 0000 0101
負(fù)5則是要先求出源碼,然后再按位取反,再加1 才是負(fù)數(shù)的補(bǔ)碼 如
(源碼)0000 0000 0000 0101
(按位取反)1111 1111 1111 1010 (負(fù)數(shù)補(bǔ)碼)1111 1111 1111 1011
再存放整數(shù)的存儲單元中,最左邊(首位)一位是用來表示符號的,0表示正數(shù),1表示負(fù)數(shù)
現(xiàn)在的編譯環(huán)境一般都是分配的是4個字節(jié)(32位),范圍是-2^31到2^31-1 即 -214 748 3648到-214 748 3647
短整型 short int :
短整型一般都是分配兩個字節(jié)存儲方式與int相同,系統(tǒng)一般是分配2個字節(jié)(16位),數(shù)值能表示的范圍是-32768-32767(比int少)
長整型 long int :
系統(tǒng)會分配4個字節(jié)(32位),那么長整型所能表示的數(shù)字范圍就是-2^63----2^63-1了。與int不相同的是int 至少有2個字節(jié)以上,long至少有4個字節(jié)以上,并且sizeof(int )<=sizeof(long int)。
有些編譯環(huán)境的int只是兩個字節(jié)而已
雙長整型 long long int:
系統(tǒng)會分配8個字節(jié)(64位),那么長整型所能表示的數(shù)字范圍就是-2^63----2^63-1了。(比長整型長得多)
注* 當(dāng)然上面所說的 在64位系統(tǒng)下,而且還是要看具體的編譯環(huán)境,如果在32位的機(jī)子或者比較古老編譯環(huán)境的上面,數(shù)值能表示情況和分配字節(jié)會會有所不同。
unsigned(無符號類型)
在整數(shù)中,有 有符號和無符號之稱,一般默認(rèn)都是有符號的,在變量定義前加上,unsigned 關(guān)鍵字 ,就可將整型數(shù)據(jù)轉(zhuǎn)換為無符號類型數(shù)據(jù),也就是數(shù)學(xué)中的絕對值數(shù)字。一般默認(rèn)初始化都是有符號的。
實(shí)型數(shù)據(jù)不能加signed(有符號)或unsiged(無符號)修飾符。
由于無符號數(shù)據(jù)最高位不再用來表示符號,而用來表示數(shù)字,所以無符號的存儲會比有符號的存儲范圍擴(kuò)大一倍。即65535位。如-1在兩字節(jié)中存放的補(bǔ)碼形式是 1111 1111 1111 1111 最開始的一位數(shù)字就表示的符號位 ,數(shù)值就只有2^15位。但是如果它加上unsigned無符號,那么第一位將不再代表符號,所以數(shù)值也就相應(yīng)增加到2^16位了。
字符型 char:
字符數(shù)據(jù)在內(nèi)存中的儲存是:每個字符變量被分配一個字節(jié)的空間,所以一個單引號只能放一個字符,字符值是以ASCII碼形式存放在存儲單元中的。字符可以是任意的字符,但數(shù)字被定義成字符后就不能參與數(shù)值運(yùn)算了 如 ‘ 5 ‘ 和5是不同的,’ 5 ‘是字符常量,它只是表示一個形狀位‘5’的符號,在需要時按原樣輸出而已,并不是以數(shù)值存放的,所以不能參與運(yùn)算。
char是int的一種特殊形式。在一般時候,也可以定義位char類型的變量來像int的變量一樣操作。
可以將0-127的整數(shù)賦值給一個字符變量。如果將負(fù)數(shù)賦值下去,由于字符型只能讀取一個字符,所以前面的符號將不會被讀取。
定義字符變量,實(shí)際上是定義一個字節(jié)的整型變量,它只不過是用來存放字符而已,
char a = '-6';char b = a;printf("%c", b);//結(jié)果是輸出6
signed char(有符號) 能表示的數(shù)值范圍是-2^7到2^7-1 即-128-127
unsigned char (無符號)能表示的數(shù)值范圍 是2^8-1 即 0-255
(還有一種字符串形式數(shù)據(jù)類型,后面會詳細(xì)介紹)
布爾型 bool:
在使用次類型前需要添加預(yù)處理頭文件命令#include,然后才可以定義定義次變量 如bool a;布爾型的值只有兩個:false(假)和true(真)。false的值為0,true的值是1(或者是非0的值都是),bool只占用一個字節(jié)。
_BOOL長度視實(shí)際環(huán)境來定,一般可認(rèn)為是4個字節(jié)。(這個是不用頭文件可以定義的)但是類型值只有0和1這兩個值。
3、浮點(diǎn)型(實(shí)數(shù)型)
在C語言中,實(shí)數(shù)是以指數(shù)形式存放在內(nèi)存中的,一個小數(shù)表示為指數(shù)的形式有很多,如3.14159,可以表示為 0.0314159*10^2或314.159*10^-2 等等。
由于它小數(shù)點(diǎn)的位置可以移動,所以叫它浮點(diǎn)數(shù)。所有的浮點(diǎn)數(shù)類型的數(shù)值以二進(jìn)制指數(shù)形式存放在內(nèi)存中,在儲存中,系統(tǒng)將小數(shù)部分和指數(shù)部分分別存放。
存儲分為三部分:符號位,小數(shù)位,指數(shù)位是以2冪次來表示的。存儲方式都是用科學(xué)計(jì)數(shù)法來存儲數(shù)據(jù)的 如:133.5(在內(nèi)存中)符號位(0為正)階碼(指數(shù)位)尾數(shù)(小數(shù)點(diǎn)后的數(shù))
135.5單精度的浮點(diǎn)數(shù),先轉(zhuǎn)整數(shù)135轉(zhuǎn)換成二進(jìn)制為1000 0101,然后再轉(zhuǎn)小數(shù)的5轉(zhuǎn)換為0.1,則135.5二進(jìn)制為1000 0101.1。
這個表示尾數(shù) 然后首先要用科學(xué)計(jì)數(shù)法的形式表示出來,1000 0101.1科學(xué)計(jì)數(shù)法就是1.0000 1011*2^7
這里的階碼用移碼來表示,float的偏移量為127.階碼位是8位,那么這里的階碼就是127+7=134;將134轉(zhuǎn)為二進(jìn)制是1000 0110;
由于規(guī)定小數(shù)點(diǎn)前面都為1,因此在計(jì)算機(jī)中,將不會存儲小數(shù)點(diǎn)前面的1,這里的尾數(shù)就為00001011。其后全部補(bǔ)0,將其補(bǔ)充夠23位數(shù)。這里是正數(shù),所以符號位為0
因此數(shù)字在內(nèi)存中存儲為:0100 0011 0000 0101 1000 0000 0000 0000(四個字節(jié))
**由于用二進(jìn)制表示一個浮點(diǎn)數(shù)對于存儲單元來說長度是有限的,因此不能得到完全精準(zhǔn)的值,只能保持有限的精確度。小數(shù)部分占的位數(shù)越多。有效數(shù)字越多,指數(shù)部分占的位數(shù)越多,則能表示的數(shù)值范圍越大。
**偏移量:是指浮點(diǎn)數(shù)表示法中的 指數(shù)域 的 編碼值 為指數(shù)的 實(shí)際值 加上某個固定的值,用IEEE 754 國際標(biāo)準(zhǔn)規(guī)定該 固定值 為 2 的 (e?1)次方減 1 其中的e 為 存儲指數(shù)的單位元 的長度 (即有幾個 bit) (就是看一個浮點(diǎn)類型能表示指數(shù)部分最大范圍)
單精度浮點(diǎn)型 float :
單精度浮點(diǎn)型字節(jié)數(shù)為4個字節(jié),有效數(shù)字6-7個,小數(shù)長度23位(24的話是包括符號位)。指數(shù)域是8位單位元,固定偏移值是2 的 (7)次方減 1, 就是 2的七次方減1,等于 127
(取值范圍見圖)
雙精度浮點(diǎn)型 double:
雙精度浮點(diǎn)型存儲字節(jié)數(shù)為8個字節(jié),有效數(shù)字達(dá)到15個,小數(shù)長度52位(53的話是包括符號位)指數(shù)域是11個單位元。固定偏移值是2 的 (10)次方減 1, 就是 2的十次方減1,等于 1023
(取值范圍見圖)
長精度浮點(diǎn)型 long double :
不同的編譯器對于long double 所給的數(shù)據(jù)都不一樣,一般來說都是分配16個字節(jié),有效數(shù)字達(dá)到19個。
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7048瀏覽量
89078 -
存儲
+關(guān)注
關(guān)注
13文章
4317瀏覽量
85878 -
內(nèi)存
+關(guān)注
關(guān)注
8文章
3028瀏覽量
74082 -
編譯
+關(guān)注
關(guān)注
0文章
659瀏覽量
32878
原文標(biāo)題:C語言知識總結(jié)二:基本的數(shù)據(jù)的表現(xiàn)形式與運(yùn)算
文章出處:【微信號:C語言學(xué)習(xí)聯(lián)盟,微信公眾號:C語言學(xué)習(xí)聯(lián)盟】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論