「C++」C++ Primer Plus 笔记:第三章 处理数据
面向對象編程的本質是設計并擴展自己的數據類型。
C++內置的數據類型分為兩組:基本類型和復合類型。基本類型包括整數和浮點數;復合類型是在基本類型的基礎上構建的數組,字符串,指針和結構。
3.1 簡單變量
3.1.1 變量名
- 命名規則
- 名稱中只能使用字母,數字,下劃線
- 名稱第一個字符不能為數字
- 不能使用C++關鍵字作為名稱
- 兩個下劃線開頭/下劃線+大寫字母開頭的也不可以,這樣的名稱是留作系統使用
3.1.2 整型
- C++ 的基本整型分別是:char,short,int,long和C11新增的long long;每種類型都有符號版本和無符號版本
3.1.3 整形short,int,long和long long
- short是short int的簡稱,而long是long int的簡稱
- sizeof
返回數據類型占用內存長度 - #include
定義了符號常量來表示類型限制 - #define
該指令的工作方式類似文本編輯器或字處理中的全局搜索并替換命令,它之查找獨立的標記(單獨的單詞),跳過單詞內部嵌入的搜索內容;C++創建符號常量的方法一般使用const,不會經常使用#define,但在C++中仍會用到#define - 可以使用表達式對變量賦值,前提是表達是已經定義過的
- C++賦值方式:int wrens(432);
- C++11標準允許等號、大括號來初始化變量,例如:int emus = {7}; int rheas = {12}; int rocs = {}; // set rocs to 0 int psychics{}; //set psychice to 0 大括號初始化器是C++專有,使變量初始化方式趨于平凡
3.1.4 無符號類型
- 創建無符號數據類型,只需要使用關鍵字unsigned來修飾聲明即可:unsigned short change;
- 當超出數值類型能夠表示的范圍時,其實際表示的值需要根據計算機系統計算規則來計算
3.1.5 選擇整型類型
- 數據類型聲明沒有特殊需求,一般使用int;如果變量表示的整數大于16位整數值,建議使用long,方便在程序移植時;無符號數可以表示現實生活中不會是負數的數據比如人口;short比int小,可以在需要節省內存的時候使用;只需要一個字節的,可以使用char
3.1.6 整型字面值
-
C++能夠以三種不同的計數方式書寫整數:基數為10、基數為8、基數為16;且使用前一(兩)位來標識基數。如果第一位為1-9,則基數為10;如果第一位是0,第二位是1-7,則基數為8;如果前兩位為0x/0X,則基數為16。這些書寫方式僅僅是為了表達方便,最終都會以二進制的方式存儲在計算機內存中
-
默認情況下,cout以十進制格式顯示整數;如果要以十六進制/八進制方式顯示,可以特別指明:C++使用控制符endl指示cout重起一行,除此之外還提供了dec,hex,oct分別用于指示cout以十進制、十六進制、八進制格式顯示整數,具體用法如下:
int a = 42; int b = 42; int c = 42;cout << "a = " << a << ", in decimal. "; cout << hex; cout << "b = " << b << ", in hexadecimal. "; cout << oct; cout << "c = " << c << ", in octal. ";最終得到的輸出如下:
"a = 42 in decimal. " "b = 2a in hexadecimal. " "c = 52 in octal. "這些控制符都處于std命名空間,只修改了cout的輸出方式
3.1.7 C++如何確定常量類型
- C++在面對未知數據類型時,除非有理由存儲為其他類型,否則將存儲為int類型
3.1.8 char類型:字符和小整數
-
char類型是專門為存儲字符設計的,由于很多系統支持的字符數大多不超過128個,可以由一個字節表示,因此雖然char用來表示字符,但也可以用來表示short更小的整型
-
C++對字符使用單引號,對字符串使用雙引號
-
“\n”、'\n’在C++中表示換行符
-
ASCII碼在一個變量中存儲的是數字編號,當打印時,cout將存儲的數字編號轉換成數字編號對應的字符,cin和cout的這一行為,是由變量類型引導的
-
一定要注意C++中單引號和雙引號使用區別:單引號表示一個字符,雙引號表示一串字符
-
cout.put()函數顯示一個字符
-
在cout.put()函數中,cout表示對象,put()表示成員函數,其中“.”被稱為成員運算符
-
轉移序列:\
-
換行符\n可以替代endl
-
char默認情況下既不是沒有符號,也不是有符號類型,具體要根據C++的實現來決定,這樣開發人員可以最大限度地將這種類型與硬件屬性匹配起來;如果有必要,可以顯式地設置char類型:
char fodo; // 可能是signed,也可能是unsigned unsigned char bar; // unsigned signed nark; // signed -
wchar_t:寬字符類型。char表示基本字符類型,一般的表示范圍為-128到127(signed類型)或者0-255(unsigned)類型,但如果要表示超過這個范圍的字符類型,那么就可以使用wchar_t;cin和cout將輸入和輸出看做是char流,而對于wchar流,應該使用wcin和wcout來進行處理。此外C11新增了長16位的char16_t和長度為32位的char32_t兩種無符號數據類型
-
C++支持隱式轉換,所有非零值會被轉換為true,零值轉換為false
3.2 const限定符
- const:當在變量申請時申明該變量為const,那么之后任何試圖修改該變量的操作都是不允許的;且應該變量申請時就初始化,如果沒有在聲明中初始化,那么該值將是不確定的,且無法修改
3.3 浮點數
3.3.1 書寫浮點數
- 手寫方式或科學計數法方式(科學計數法中數字前面的符號用于表示正負,e后面的正負表示指數縮放)
3.3.2 浮點類型
- ostream庫中的setf()函數迫使輸出使用定點表示法,防止程序把較大的值切換成科學表示法,并使程序顯示到小數點后6位
- 通常cout會刪除結尾處的0,而setf會覆蓋這一行為,正常顯示到小數點后6位;雖然只顯示6位,但當float和double分別乘以一百萬后,顯示的結果會因為精度不同而有所區別
3.3.3 浮點常量
- 程序中書寫浮點常量默認為double類型。如果希望是float類型,需要在數字后面加上f/F后綴;long double類型需要加上l/L后綴
3.3.4 浮點數的優缺點
- 浮點數的運算比整數慢
3.4 C++算術運算符
-
-
-
- /:當除數和被除數同時為整數時,除法返回整數結果;當其中一方為浮點數時,除法結果為浮點數
- %:取余/模運算
- 對于float,C++只保證6位有效位
3.4.1 運算符優先級和結合性
- C++遵從代數的計算優先級:先乘除、后加減;乘除是同一優先級,加減是同一優先級;但同一優先級的運算,運算順序從左到右,比如120 / 4 * 5 = 150
3.4.2 除法分支
- 浮點常量默認情況下是double類型
- 運算符重載:使用相同的符號進行多種操作;C++允許擴展運算符重載
3.4.3 求模運算符
3.4.4 類型轉換
- C++有11種整形和3種浮點型
- C++發生類型轉換的場景:
- 將一種算術類型賦值給另一種算術類型
- 表達式中包含不同類型時
- 將參數傳遞給函數時,會進行類型轉換
3.4.4.1 初始化和賦值進行轉換
當較大的浮點數->較小浮點數,浮點數->整型,較大的整型->較小的整型,都可能存在結果不確定。
3.4.4.2 以{}方式初始化時進行的轉換(C11)
C11對類型轉換要求更嚴格:
3.4.4.3 表達式中的轉換
表達式中的轉換存在兩種情況:
在計算表達式時,C++會自動將bool,char,usigned char,signed char和short自動轉換為int,這種轉換被成為整形提升,一個整形提升的例子是:short chickens = 20; short ducks = 35; short fowl = chickens + ducks; 當計算fowl值時,編譯器自動將chickens和ducks轉換成int類型,計算出結果后,再將結果從int轉換成short。這么做的原因只是因為計算機使用這種類型,計算會更快。
例如將int和float相加時,當運算涉及兩種類型,小的類型會被轉換為較大的類型。
-
C11版本類型轉換校驗表
- 如果有long double,向long double看齊
- 如果有double,向double看齊
- 如果有float,向float看齊
- 如果以上都沒有,則執行整形提升
- 如果兩個操作數都是有符號的/無符號的,級別低的向級別高的靠攏
- 如果一個有符號,一個無符號,且無符號操作數比有符號操作數級別高,仍然是級別低向級別搞看齊
- 如果有符號類型可以表示無符號所有可能取值,則將無符號轉換為有符號類型進行操作
- 否則,將兩個操作數都轉換為有符號類型的無符號版本
-
傳統C總是將float提升為double
-
級別就是:long long > long > int > short > signed char; char = signed char = unsigned char, bool級別最低;wchar_t, char16_t, char32_t級別與底層類型相同
總結
以上是生活随笔為你收集整理的「C++」C++ Primer Plus 笔记:第三章 处理数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 惠普笔怎么u盘启动项 惠普笔记本如何设置
- 下一篇: win10笔记本重启黑屏怎么办啊 win