序
C++語言提供了豐富的數據類型,本節介紹幾種基本的數據類型:整型、實型、字符型。它們都是系統定義的簡單數據類型,稱為標準數據類型。
整型(integer)
在C++語言中,整型類型標識符為int。根據整型變量的取值范圍又可將整型變量定義為以下8種整型類型:
數
據
類型
定義標識符 占
字
節
數
數值范圍 短
整
型
short[int] 2(16位)
-32768~32767 整
型
[long] int 4(32位) -2147483648~2147483647 長
整
型
long [int] 4(32位) -2147483648~2147483647 超
長
整
型
long long [int] 8(64位) -9223372036854775808~9223372036854775807 無
符
號
整
型
?unsigned [int] 2(16位) 0~65535 無
符
號
短
整
型
unsigned short [int] 2(16位) 0~65535 無
符
號
長
整
型
unsigned long [int] 4(32位) 0~4294967295 無
符
號
超
長
整
型
unsigned long long 8(64位) 0~18446744073709551615
實型(Real types)
數據類型 定義標識符 數值范圍 占字節數 有效位數 單精度實型 float -3.4E-38~3.4E+38 4(32位) 6~7位 雙精度實型 double -1.7E+308~1.7E+308 8(64位) 15~16位 長雙精
度實型
long double -3.4E+4932~1.1E+4932 16(128位) 18~19位 布爾變量 bool 真true或假false之一 1(8位) ? ? ? \
字符型(char)
字符常量有以下兩種表示法: ? ? ?
1、普通表示形式
字符常量是由單個字符組成,所有字符采用ASCII編碼,ASCII編碼共有128個字符(表2-4)。在程序中,通常用一對單引號將單個字符括起來表示一個字符常量。如:'a','A','0'等。如字符A的序號是65,字符a的序號是97, 字符0的序號的48。
2、轉義字符表示形式
轉義字符有三種用法:表示控制字符、表示特殊字符、表示所有字符。常用的轉義字符如下表所示。
轉義字符 含義 '\n' 換行 '\t' 水平制表 '\b' 退格 '\r' 回車(不換行) '\0' 空字符 '\’' 單引號 '\”' 雙引號 '\\' 一個反斜杠字符 '\ddd' 1~3位八進制數所代表的字符 '\xhh' 1~2位十六進制數所代表的字符 ASCII編碼表見下圖:
![]()
例題
【例1】分別定義int,short類型的變量各一個,并依次輸出它們的存儲空間大小(單位:字節)。
【參考程序】
#include<iostream> using namespace std; int main() { int x; short y; cout<<sizeof(x)<<" "<<sizeof(y)<<endl; //sizeof返回一個對象或者類型所占的內存字節數return 0; }
基于char數據的這個特點,它可以和int變量一樣做加減運算,例1說明了這種用法。
【例2】計算ASCII值
【參考程序】
#include<cstdio> #include<iostream> using namespace std; int main() {int b = 'A'; //初始b值b *= 2; //相當 b = b*2printf("%d",b); //輸出b值return 0; }
【程序解釋】 ?? ?
①程序定義int整型變量b,但是并沒有初始化一個整數,而是字符‘A’,通過ASCII碼表可以查到A對應的十進制ASCII碼值是65。 ?? ?
②然后做b *= 2的運算,b = b*2,即65×2,結果為130。
數據類型轉換
C++語言中,不同數據類型的運算對象進行混合運算,或者需要將一個表達式的結果轉換成期望的類型時,就需要依據數據類型轉換規則進行轉換。
1、混合運算時的類型轉換規則
整型、實型、字符型數據間可以混合運算。在這種情況下,需要將不一致的數據類型轉換成一致的數據類型,然后進行運算。為了保證運算精度,系統在運算時的轉換規則是將存儲長度較短的運算對象轉成存儲長度較長的類型,然后再進行處理。這種轉換是系統自動進行的,具體如圖所示。
混合運算時的類型轉換規則
【說明如下】
1)縱向箭頭表示必定會進行的轉換,如float型數據必先轉換為double型數據,然后與其他操作數 進行運算。與此類似,char型或short型數據必先轉換為int型數據,然后進行運算。 2)橫向箭頭表示當運算對象為不同類型數據時的轉換方向,如int型數據與unsigned型數據進行運 算,int型轉換為unsigned型后方可進行運算。int型與double型進行運算,int型直接轉換為double 型后進行運算,不能理解為先轉換為unsigned int型,然后轉換為long int型,最后再轉換為double型。
2、賦值時的類型轉換規則
當賦值運算符兩側的數據類型不同時,需進行類型轉換,這種轉換是系統自動進行的,轉換規則如下:
1)float、double型賦值給int型:直接截斷小數。 例如,“int i=f+0.6;”,f的值為4.0,右邊算術表達式運算后的結果為4.6的double型數據,根據上述轉換原則,直接舍棄小數,所以i的值為4。
2)int、char型賦值給float、double型:補足有效位以進行數據類型轉換。 例如:“float f=4;”,float為7位有效數字,所以f的值為4.0000000。
3)char型(1字節)賦給int型(4字節):數值賦給int型的低8位,其它位補0。
4)long ?int型賦值給int型:long int型截斷低字節給int型。
5)int型賦值給long int型:賦給long int型的低16位,如果int型的最高位是0,則long int的高16位全為0;如果int型的最高位是1,則long int型的高16位全為1(稱為“符號擴展”)。 6)unsigned int型賦值給int型:直接傳送數值。
7)非unsigned int型賦值給位數相同的unsigned int型:直接傳送數值。
3、強制類型轉換
在C++語言中,還允許強制類型轉換,即將某一數據的數據類型轉換為指定的另一種數據類型,強制類型轉換只是臨時轉換。強制轉換運算符組成的運算表達式的一般形式為:
(類型名)(表達式) ? ?
例如:已知有變量定義“int b=7;float a=2.5,c=4.7;”,求下面算術表達式的值。 ? ? ? ? ?
a+(int)(b/3*(int)(a+c)/2.0)%4
根據運算符的結合性規則,表達式要自左至右執行,b/3為2,2*(int)(a+c)為14,14/2.0為7.0,強制類型轉換后為7,7%4為3,a的值2.5與3相加,最終結果為5.5。
4、例題
計算成績
【題目描述】 ? ?
牛牛最近學習了C++入門課程,這門課程的總成績計算方法是: ? ?
總成績=作業成績×20%+小測成績×30%+期末考試成績×50% ? ?
牛牛想知道,這門課程自己最終能得到多少分(整數)。
樣例輸入:100 ?100 ?80 ? 樣例輸出:90
【分析】 ? ? 如果根據題目描述,將A,B,C定義為整型數據,而在運算過程中出現浮點型數據,就會涉及數據類型的轉換,最后以整型輸出。 程序如下:
#include<iostream> using namespace std; int main(){int A,B,C,ans;cin>>A>>B>>C; //輸入A,B,C成績ans=(int)(A*0.2+B*0.30+C*0.50); //強制類型轉換,不加(int)自動轉換cout<<ans; //輸出總成績return 0; }
總結?
有不懂的地方可以si我,和我一起學習C++吧。
備注
還沒有下載DEV-C++的小伙伴們可以私我拿到免費安裝包