一、分類
1.a 標量型別:
a1 算術型別
a1基本型別
1 整型:標準整數型別、擴充的整數型別
2 實型/浮點型:實數浮點型別、複數浮點型別
3 字元型
a2列舉型別
a2 指標型別
b 聚合型別:
b1 陣列型別
b2 結構型別
c 聯合型別
d 函式型別
2.描述物件的資料型別可分為:
物件型別:描述包括物件儲存空間大小資訊
不完整型別:描述沒有包括物件儲存空間大小資訊
3.(小甲魚)
a 基本型別:
a 整型
b 實型(浮點型)
c 字元型
d 列舉型別
b 構造型別:
a 陣列型別
b 結構體型別
c 共用體型別
c 指標型別
d 空型別
二、基本資料型別
【不可以再分解為其他型別,即是自我說明的】
(一)根據其取值,可分為:
1.常量:值不發生改變的量,可以不經過說明而直接引用。
(1)符號常量:用識別符號代表的乙個常量
符號常量在使用之前必須先定義,一般形式為:
#define 識別符號 常量
其中#define也是一條預處理命令(預處理命令都以#開頭),稱為巨集定義命令,功能是把該識別符號定義為其後的常量值,之後程式所有出現識別符號的地方均代以其常量值。
ps. 習慣上符號常量的識別符號用大寫字母,變數的識別符號用小寫字母。
note. 注意:
<1>使用符號常量可以做到「一改全改」。
<2>符號常量的值在其作用域內不能改變,也不能再賦值。
2.變數:其值可變,必須先定義後使用。
乙個變數應該有乙個名字,在記憶體中佔據一定的儲存單元。
變數定義一般放在變數使用之前,一般放在函式體的開頭部分。
變數名!=變數值
(二)整型
1.整型常量(整常數)
(1)十進位制整常數:沒有字首,數碼為0~9。【在程式中是根據字首來區分各種進製數的】
(2)八進位制整常數:必須以0開頭,即0作為八進位制的字首。數碼取值為0~7。八進位制數通常是無符號數。
(3)十六進製制整常數:字首為0x或0x.數碼值為09,af或a~f。
(4)整型常數的字尾:
note. 在16字長的機器上,基本整型的長度也為16位,因此表示的數的範圍也是有限定的。
十進位制無符號整常數的範圍:0~65535(2^16)
有符號數:-32768~+32767
八進位制無符號整常數的範圍:0~0177777
十六進製制無符號數的範圍:0x0~0xffff或0x0~0xffff。
如果使用的數超過了上述範圍,就必須用長整型來表示【長整型數的字尾:l或l。
2.整型變數
(1)在記憶體中的存放
(見上方「變數」部分中的圖,注意3在記憶體中是以二進位制的形式儲存的)
note.
<1>乙個位元組byte=8位bit
<2>數值是以補碼表示的:正數的補碼和原碼相同;負數的補碼是將該數的絕對值的二進位制形式按位取反後再加1.
(2)分類
<1>基本型:int ,在記憶體中佔4/2個位元組。【佔多少位元組與系統和編譯器有關】
<2>短整量:short int或short。所佔位元組和取值範圍與基本型相同。
<3>長整型:long int 或long,在記憶體中佔4個位元組。
<4>無符號型:型別說明符為unsigned。
(3)整型變數的定義
變數定義的一般形式為:
型別說明符 變數名識別符號,變數名識別符號,……;
ex.
int a,b,b;
long x,y;
unsigned p,q;
note. 變數必須先定義才能實現。
ex.整型變數的定義與使用
#includevoid main()
(4)整型資料的溢位
ex.整型資料的溢位
#includevoid main()
note.
<1>short int只佔兩個位元組,也就是2^16=32768(包括0,也就是最大是32767)
<2>最後輸出的是-32768.
<3>長整型變數與基本整型變數之間運算,結果為長整型,但若結果提前被定義為基本整型,結果就為基本整型。
【不同型別的量可以參與運算並相互賦值,其中的型別轉換是由編譯器自動完成的】
(三)實型
1.實型常量的表示方法
實型也稱為浮點型。實行常量也成為實數或者浮點數。c語言中,實數只採用十進位制,它有十進位制小數形式和指數形式兩種形式。
(1)十進位制數形式:由數碼0~9和小數點組成。如:
0.0,25.0,300.,0.13,-23.140
等。注意必須要有小數點。
【標準c中允許浮點數使用字尾,字尾為"f"或"f",即表示該數為浮點數,如356f和356.是等價的】
(2)指數形式:由十進位制數、加階碼標誌"e"或"e"以及階碼(只能為整數,可帶符號)組成。
一般形式為:
a e n (a為十進位制數,n為十進位制整數)
如:2.1e5 (等於2.1*10^5)
2.實型變數
(1)在記憶體中的存放形式
實型資料一般佔4個位元組(32位)記憶體空間,按指數形式儲存。
ex.實數3.14159
符號[1] 小數部分[7] 指數部分[24]
+ . 314159 1
<1>小數部分佔的位(bit)數越多,數的有效數字越多,精度越高。
<2>指數部分佔的位數越多,能表示的數值範圍越大。
(2)分類
分為單精度(float型)、雙精度(double型)和長雙精度(long double型)
在turbo c中
單精度型佔4個位元組(32位)記憶體空間,其數值範圍位3.4e-38~3.4e+38,只能提供七位有效數字。
雙精度型佔8個位元組(64位)記憶體空間,其數值範圍為1.7e-308~1.7e+308,可提供16位有效數字。
3.實型資料的捨入誤差
由於實型變數是由有限的儲存單元組成的,因此能提供的有效數字總是有限的。
ex.實型資料的捨入誤差
#includevoid main()
//只有前七個數是正確的,後面則是隨機數(發生了捨入誤差)
三、變數賦初值
初始化:在作變數定義的同時給變數賦以初值的方法。
在變數定義中賦初值的一般形式為:
型別說明符 變數1=值1,變數2=值2……;
例如:
int a,b=1;
float x=2.3,y=3f,z=0.75;
char ch1='k',ch2='p';
各類數值型資料之間的 混合運算。
變數的資料型別是可以轉換的,轉換的方式有:
1.自動轉換
發生在不同資料型別的量混合運算時,由編譯系統自動完成。遵循規則:
(1)若參與運算量的型別不同,則先轉換成同一型別,再進行運算。
(2)轉換按資料長度增加的方向進行,以保證精度不降低。如int型和long型運算時,先把int量轉換成long型後再進行運算。
(3)所有的浮點運算都是以雙精度進行的,即使僅含float單精度量運算的表示式,也要先轉換成double型,再做運算。
(4)char型和short型參與運算時,必須先轉換成int型。
(5)再賦值運算中,賦值號兩邊量的資料型別不同時,賦值號右邊量的型別將轉換成左邊量的型別。如果右邊量的資料型別長度比左邊長時,將丟失一部分資料,這樣會降低精度。【丟失的部分按四捨五入向前捨入】
ex.
#includevoid main()
note. 本例中pi為實型,s,r為整型。在執行s=r*r*pi 語句時,r和pi 都轉換成double型計算,結果也為double型。但由於s為整型,故賦值結果仍為整型,捨去了小數部分。
四、強制型別轉換
通過型別轉換運算來實現,一般形式為:
(型別說明符) (表示式);
其功能時把表示式的運算結果強制轉換成型別說明符所表示的型別。
例如:
(float) a;
(int) (x+y);
note:
1)型別說明符和表示式都必須加括號(單個變數可以不用),如若寫成
(int) x+y,表示先把x轉換成int再與y相加。
2)強制轉換和自動轉換都只是為了本次運算的需要而對變數的資料長度進行的臨時性轉換,而沒有改變資料說明時對該變數定義的型別。
ex.#includevoid main()
/*最後輸出:
(int)f=5, f=5.75*/
C語言 基礎一 資料型別
因為要學習stm32嵌入式開發,c語言就需要重新撿起來啦 快速的過一遍c的基礎吧。在 c 語言中,資料型別指的是用於宣告不同型別的變數或函式的乙個廣泛的系統。變數的型別決定了變數儲存占用的空間,以及如何解釋儲存的位模式。c 中的型別可分為以下幾種 1 基本型別 它們是算術型別,包括兩種型別 整數型別...
C語言基礎(一)資料型別(下)
浮點數也稱小數或實數,c語言中用float和double關鍵字來定義小數。其中float為單精度浮點型,double為雙精度浮點型。c語言規定,float型別必須至少能夠表示6位有效數字,且取值範圍至少是10 37 10 37.float型別資料表示的是乙個近似的小數,不是精確地,小數點後n位有誤差...
C語言學習(一)資料型別
一 資料型別 1 資料型別 基本型別 整型int 字元型char 浮點型 單精度實型float 雙精度實型double 構造型別 陣列型別 結構型別struct 聯合型別union 列舉型別enum 指標型別 空型別 void 2 常量與變數 常量 在程式執行過程中,其值不能被改變的量 define...