編程在很大程度上都是在進行數據的處理,數據的處理方法有很多,各式各樣的算法、數據結構等。數據的類型也有很多,這裏就c++所涉及的基本數據進行一些總結。
把信息存儲於計算機,一般都是存儲在變量中,當然變量貫穿在整個程序中,通過變量的組合可以組成結構、類等,數據的傳遞也是通過變量進行的,所以說變量是數據的載體,不同的數據類型存儲在不同類型的變量中。
1. 變量命名
這裏就不多介紹,命名規則都是基礎的東西。主要說幾點常用的吧:
全局常量首字母大寫
類中數據變量後綴加“_”
2. 變量類型 整型
C++中總的有11種整型:short 、int、long、long long、unsigned short 、unsigned int、unsigned long、unsigned long long、char、unsigned char、signed char。下面進行總結。
首先8位(bit)=1字節(byte)
short:至少16位 Windows中:2字節
int:大於等於short小於等於long Windows中:4字節
long:至少32位大於等於int Windows中:4字節
long long:至少64位,大於等於long Windows中:8字節
在默認情況下,以上整型都是爲有符號整型,4字節可以表示的範圍爲:-215—215-1,對於4字節無符號數範圍爲:0—216
Short類型的變量適合存儲大型整數數組,節省內存,其他情況下默認爲int型。
對於常量的整型:一般用後綴來申明,除非數值太大超出int範圍,否則默認爲int。
對於char類型,是另外一種整型,能表示計算機所有的基本符號,一般系統字符數≤128,所以用一個字符就可以表示,可以把char當作比short更小的整型,存儲的時候轉換爲字符對應的整數,輸出的時候轉換爲對應的字符進行輸出。
wchar_t類型,2字節,用wcin,wcout,進行輸入輸出,當然需要加前綴L。顯示一個字符可以用cout.put(‘!’)。
Char默認既不是無符號型又不是有符號型,需要進行顯式的定義,無符號數0—255,有符號數-128—127。
C++11新增了新的類型:char16_t、char32_t,都是無符號整型用前綴u、U表示
這裏簡單說一下bool型,布爾變量值爲true和false,通過提升轉換可以變成1,0。任何數字值和指針值均可隱式的轉換爲布爾值,常用作while判斷表達式。
Const常量:一般首字母大寫,必須賦初值,否則導致不確定結果。
3. 浮點數
能表示帶小數部分的數值,當數值很大,無法用long進行表示,或者當數值很小時,用浮點數進行表示。有兩種表示法:標準小數點和科學計數法(e/E來表示)。指數範圍至少:-37—37。
浮點數類型有:float(>32位)、double(>48位,通常爲64位)、longdouble(80、96、128位)。對於float,系統一般保證6位有效數字,double,系統一般保證15位有效數字。
對於浮點常量,用f,F後綴表示float,一般默認爲double,用後綴L表示long double。
4. 類型轉換
(1). 初始化和賦值時的轉換
從小類型轉換爲大類型,沒有問題,反之則會降低精度。
Long轉換爲short,如果值超出short的範圍,則只複製右邊的字節。
Float轉換爲int,小數部分丟失,如果超出int範圍,結果是不確定的。
(2). {}初始化列表的方式
這種轉換則更加嚴格,只有當目標變量能正確存儲賦給它的值時才能轉換,否則不能轉換。如float不能轉換爲int,int則可能轉換爲float。
(3). 表達式中的轉換
表達式中的轉換分爲自動轉換和不同類型出現時轉換。
自動轉換:出現時便轉換。整型提升轉換:short、char、unsigned char,signed char、bool類型自動轉換爲int型。當short長度小於int時,unsigned short轉換爲int,當short長度等於int時,unsigned short轉換爲unsigned int。而wchar_t轉換爲第一個寬度足夠存儲wchar_t類型的整型。
不同類型出現時轉換:
有long double,另一個轉換爲longdouble;
否則有double,另一個轉換爲double;
否則有float,另一個轉換爲float;
否則都是整型,則整型提升。
有符號和無符號之間:
無符號級別高於有符號,則有符號轉換爲無符號
有符號可以包含無符號長度,則無符號數轉換爲有符號數
否則均轉換爲有符號類型的無符號版本。
(4). 函數或類中傳遞參數的轉換級別由高到低分別如下:
完全匹配,不用轉換
整體提升:附加float轉換爲double
標準轉換:int轉換爲char,long轉換爲double
用戶定義轉換:(類聲明實現)可用關鍵字explicit關閉隱式轉換
(5). 強制轉換
強制轉換不會修改變量本身。
4個強制轉換運算符
Dynamic_cast,基指針可以指向派生類對象,反之則賦空指針。
Const_cast 修改值的類型爲const或volatile,但其他類型必須完全相同
(對const的總結將寫在另一篇文章裏)
Static_cast兩個類型可以進行合法的隱式轉換時,纔可以用。
Reintrprect_cast