21天学通C语言-学习笔记(4)
第4章 基本數(shù)據(jù)類型
本章將重點介紹C語言提供的三組基本數(shù)據(jù)類型的使用,包括:整型、字符型和浮點型。C語言的其他高級數(shù)據(jù)類型實質上都可以視為這些基本數(shù)據(jù)類型的組合。通過本章的學習,要掌握以下知識:
- 各種整型數(shù)據(jù)類型的使用;
- 各種字符型數(shù)據(jù)類型的使用;
- 各種浮點型數(shù)據(jù)類型的使用;
- 使用 printf 函數(shù)和 scanf 函數(shù)處理各種類型的數(shù)據(jù);
- 使用 typedef 自定義數(shù)據(jù)類型;
- 限定詞 const 和volatile的使用。
4.1 整型數(shù)據(jù)類型
C語言定義了4種整型數(shù)據(jù)類型以表示不同大小的整數(shù)數(shù)值。
- short int:短整型
- int:整型
- long int:長整型
- long long int:長長整型
本節(jié)將介紹各種整型數(shù)據(jù)類型的字節(jié)長度、整型常量和整型變量的使用,以及使用整型類型的存儲方式和范圍。
4.1.1 字節(jié)長度
在不同的編譯器和不同的硬件環(huán)境中,整型數(shù)據(jù)類型的字節(jié)長度可能不同,但是都具有以下關系:short int 型的長度不大于 int 型的長度,int 型的長度不大于 long int 型的長度,long int 型的長度不大于 long long int 型的長度。
【范例4-1】 輸出各整型的字節(jié)長度,實現(xiàn)方法如示例代碼4-1所示。
示例代碼4-1
#include <stdio.h>int main(void){printf("sizeof(short int) = %d\n, sizeof(short int)"); /*輸出short int型的字節(jié)長度*/printf("sizeof(int) = %d\n, sizeof(int)"); /*輸出int型的字節(jié)長度*/printf("sizeof(long int) = %d\n", sizeof(long int)); /*輸出long int型的字節(jié)長度*/printf("sizeof(long long int = %d\n)", sizeof(long long int)); /*輸出long long int型的字節(jié)長度*/return 0; }【代碼解析】程序中是用來字節(jié)操作符sizeof,其使用方式為: sizeof(數(shù)據(jù)類型)
sizeof 的作用是得到數(shù)據(jù)類型所占空間,以字節(jié)為單位。括號中也可以是變量、常量或其他表達式。
4.1.2 符號修飾符
C語言中,signed 和unsigned 稱為符號修飾符,可以用來作為上面四種整型數(shù)據(jù)類型的前綴,以組成有符號整數(shù)和無符號整數(shù)。帶signed 前綴的數(shù)據(jù)類型和沒有符號修飾的整型一樣,都可以表示所有的整數(shù);而帶unsigned 修飾的數(shù)據(jù)類型都只能用來表示無符號數(shù),即非負整數(shù)。
符號修飾符不會改變數(shù)據(jù)類型的字節(jié)長度,所以signed 和unsigned 型所能表示的整數(shù)個數(shù)是一樣的,但是它們表示的整數(shù)范圍是不同的。
4.1.3 整型常量
整型常量是指用以表示整型數(shù)值的常量,有四種。每種分為有符號型和無符號型。
4.1.4 整型變量
整型變量是指用以存儲整型數(shù)值的變量,有四種。每種分為有符號型和無符號型。
4.1.5 存儲方式
整型按照存儲方式和數(shù)值區(qū)間的不同,可分為兩大類:有符號整型和無符號整型。有符號整型在內(nèi)存中的存儲分為兩部分:符號部分和數(shù)值部分。
符號部分占1位。0為非負數(shù),1為負數(shù)。其余部分都屬于數(shù)值部分,整數(shù)變量的數(shù)值以二進制的形式存放在該部分中。而無符號整型的存儲方式相對簡單,只有數(shù)值部分。
4.1.6 數(shù)值范圍
不同整型數(shù)據(jù)的字節(jié)長度不同,因此,它們可表示的數(shù)值范圍也是不同的。
4.2 字符型數(shù)據(jù)類型
C語言中的字符型數(shù)據(jù)只有一種,即 char 型數(shù)據(jù)類型。使用符號修飾符還可以得到無符號字符型和有符號字符型。
4.2.1 字節(jié)長度
在C語言標準中,char 型的字節(jié)長度被定義為1,即8位。
4.2.2 字符常量
字符常量,即用以表示字符的常量。C語言中的字符常量都包含在單引號中,單引號內(nèi)具體的內(nèi)容可以分為兩種。
單個字符:單個字符常量是指單引號內(nèi)只含一個字符的常量。
轉義字符:以反斜杠(\)開頭的轉義字符,其作用是把反斜杠后面的字符轉換為特定形式。
4.2.3 字符變量
字符變量是用于存儲字符型數(shù)值的變量。字符型變量也有兩種:有符號型和無符號型。對字符型變量有兩種賦值方式。一種是字符常量,另一種是整型數(shù)值賦值,整型數(shù)值會自動轉化為相應的ASCII碼賦值給字符變量。
(此處易忽略)比如: char c1 = 97; 此處97為ASCII值,對應的控制字符為‘a(chǎn)’
【范例4-7】展示字符型變量的使用,實現(xiàn)方法如示例代碼4-7所示。
示例代碼4-7
#include <stdio.h> #include<stdlib.h> //為了解決VS2013閃退加的int main(void) {char c1 = '\n';unsigned char c2 = '\t';char c3 = 49;printf("c1 = [%c], [%d]\n", c1, c1);printf("c2 = [%c], [%d]\n", c2, c2);printf("c3 = [%c], [%d]\n", c3, c3);system("pause"); //為了解決VS2013閃退加的return 0; }【運行結果】程序運行后,得到結果如圖4-10所示。
圖4-10 字符型變量的使用
【代碼解析】轉義字符‘\n’的作用是換行,第一個printf函數(shù)里的 %c 處會替換為 ‘\n’,輸出到終端上則會替換為換行;%d則為 c1 的 ASCII 碼值代替。轉義字符 ‘\t’ 的作用為水平制表,第二個 printf 里的%c 會替代 ‘t’, 輸出到終端上,則替代為水平制表(即跳到下一個Tab位置),%d 同樣被 c2 的 ASCII 值代替。數(shù)值 49 對應的 ASCII 碼為’1’,第三個 printf 里的%c 將替代為‘1’,%d 將替代為整數(shù)49。
4.2.4 存儲方式
字符型數(shù)據(jù)類型的存儲方式和整型十分相似。
-
有符號字符型和有符號整型一樣,最高位為符號位,其余部分都屬于數(shù)值部分,其值等于該字符型數(shù)據(jù)的數(shù)值的絕對值。
-
無符號字符型只含數(shù)值部分。
4.3 浮點型數(shù)據(jù)類型
C語言共定義了三種浮點型數(shù)據(jù)類型來表示不同精度和不同數(shù)值范圍的浮點數(shù)。
- Float:單精度型;
- Double:雙精度型;
- long double:長雙精度型。
本節(jié)先討論字節(jié)長度,再討論浮點型常量和變量的使用,最后討論各個浮點型數(shù)據(jù)類型的精度、數(shù)值范圍和存儲方式。
4.3.1 字節(jié)長度
規(guī)定:float 型不大于 double 型,double 型不大于 long double 型。在不同編譯器和不同硬件環(huán)境下,各類型的字節(jié)長度有所變化。Visual C++ 2005 環(huán)境下,float 型字長為 4 字節(jié),即 32 位;double 型和 long double 型字長為 8 字節(jié),即 64 位。
4.3.2 浮點型常量
浮點型常量是用以表示浮點數(shù)值的常量。C語言中的浮點型數(shù)值默認為雙精度類型,可以使用 f 或 F 作為后綴得到單精度型常量,或使用 l 或 L 作為后綴得到長雙精度常量。它們的表示有小數(shù)和指數(shù)兩種形式。
- 小數(shù)形式的示例有:1500.13/3.1415926、-0.007。
- 指數(shù)形式有三部分:數(shù)值1、e 或 E、數(shù)值2,其值等于(數(shù)值1)×(10
的(數(shù)值2)次方)。上述小數(shù)形式的示例用指數(shù)形式表示依次為:1.50013e3、31415.926E-4、-0.7e3,中間的e大小寫均可。 - 浮點型常量的整數(shù)部分為 0 時,省略整數(shù)部分的 0 也是合法的,比如:-0.007 可以寫為-.007,-0.7e3可以寫為-.7e3。
- 指數(shù)形式中,e 前面必須為數(shù)字,也必須有數(shù)字;e 后面必須為整數(shù),也必須有整數(shù)。
4.3.3 浮點型變量
浮點型變量是用以存儲浮點型數(shù)值的變量。三種浮點型變量定義變量的形式:
- float f ;
- double d ;
- long double ld ;
printf 函數(shù)與 scanf 函數(shù)處理浮點型數(shù)據(jù)的格式如下表所示:
| float(f) | 4 | 7 | -38 ~ 38 | %f |
| double | 8 | 約16 | -308 ~ 308 | %f |
| long double(l) | 12 | 約19 | -4932 ~ 4932 | %llf |
4.3.4 精度
不同浮點型的精度不同,精度從低到高依次為 float 型、double 型和 long double 型。精度是指精確到小數(shù)點后的位數(shù),位數(shù)越多,精度越高。
4.3.5 數(shù)值范圍
不同浮點型可表示的數(shù)值范圍也不同,由于浮點型在內(nèi)存中是以科學計數(shù)法的方式來存儲的,其數(shù)值范圍只能使用數(shù)量級范圍來表示。可表示的數(shù)量級范圍從小到大依次為 float 型、double 型和 long double 型。
4.3.5 存儲方式
以 Linux 下的 GCC 3.2.2 的實現(xiàn)為例,討論浮點型的存儲方式。
1.符號位:浮點型的符號位只有一位,為其最高位。如果該位為1,則表示其為負數(shù);如果該位為0,則表示其為非負數(shù)。
2.指數(shù)位:浮點型的指數(shù)為以補碼形式存儲,其科學計數(shù)法表示形式的指數(shù)部分。指數(shù)位決定浮點型可存儲的數(shù)值范圍。但,真正的指數(shù)值為該類型的偏差值減去該存儲值的結果。每種類型的偏差值是固定的。
3.基數(shù)位:基數(shù)位是浮點型的最后一部分,其位數(shù)決定了精度。
4.4 用戶自定義類型
除了C語言自帶的數(shù)據(jù)類型外,程序員還可以使用關鍵字 typedef 定義數(shù)據(jù)類型。
標準形式: /*typedef 原數(shù)據(jù)類型 新數(shù)據(jù)類型 */
如:typedef char myChar;
使用 typedef 可以簡化復雜的類型聲明;提高程序的可維護性和可移植性;自定義數(shù)據(jù)類型集。
4.5 限定詞 const 與 volatile
它們是兩個數(shù)據(jù)類型限定詞,均在變量定義中使用。使用 const 的形式如下:
const 數(shù)據(jù)類型名 變量名 = 初始值;
或者:數(shù)據(jù)類型名 const 變量名 = 初始值;
使用 const 變量有以下好處:提高程序的可讀性;提高程序的可維護性;避免只讀變量被意外修改;提高程序效率。
使用 volatile 告訴編譯器其修飾的變量是隨時可能變化的,編譯器優(yōu)化時必須每次都重新讀取這個變量的值,而不是使用保存在寄存器里的備份。volatile 無須初始化,標準使用形式為:volatile 數(shù)據(jù)類型名 變量名;
或:數(shù)據(jù)類型名 volatile 變量名;
volatile 限定詞的主要目的是提示編譯器,每次讀取器數(shù)據(jù)時,都會老老實實地從內(nèi)存中讀取,不會對其優(yōu)化,在多線程環(huán)境下經(jīng)常使用 volatile 變量。
總結
以上是生活随笔為你收集整理的21天学通C语言-学习笔记(4)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 下列属于计算机人工智能应用领域的是多选题
- 下一篇: 前端测试框架 jasmine 的使用