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