C Primer Plus 第三章 學習

2021-08-21 19:24:22 字數 3844 閱讀 4578

oop的本質是設計並拓展自己的資料型別,即讓型別與資料匹配。

c++內建的型別,分為兩組:基本型別,復合型別。

基本型別:整數,浮點數

復合型別:陣列,字串,指標和結構。

標識儲存的資料的方法------使用變數

3.1簡單變數

程式必須記錄三個基本屬性

1.資訊將儲存在**

2.要儲存什麼值

3.儲存何種型別的資訊

宣告中使用的型別描述了資訊的型別和通過符號來標識其值的變數名 

int n;

n=5;

3.1.1變數名

c++的命名規則

1在名稱中只能使用字母字元、數字和下劃線(_)。

2名稱的第乙個字元不能是數字

3區分大寫字元與小寫字元 

4不能將c++關鍵字用作名稱。

5以兩個下劃線或下劃線和大寫字母打頭的名稱被保留給實現(編譯器及其使用的資源)使用。以乙個下劃線開頭的名稱被保留給實現,用作全域性識別符號。

6c++對於名稱的長度沒有限制,名稱中所有的字元都有意義,但有些平台有長度限制。

全域性名稱指的是名稱被宣告的位置

3.1.2整型

整數就是沒有小數部分的數子,整數有很多,如果將無限大的整數看作很大,則不可能用有限的計算機記憶體來表示所有的整數。因此語言只能表示所有整數的乙個子集。有些語言只提供一種整形(一種型別滿足所有要求!)。而c++則提供好幾種,這樣便能夠根據程式的具體要求選擇最合適的整型。

不同c++整形使用不用的記憶體量來儲存整數。使用的記憶體量越大,可以表示的整數值範圍也越大。有的型別(符號型別)可表示正負值,而有的型別(無符號型別)不能表示負值,術語寬度(width)用於描述儲存整數時使用的記憶體量。使用的記憶體越多,則越寬。c++的基本型別(按寬度遞增的順序排列)分別是char,short,int,long和c++11新增的long long ,其中每種型別都有符號版本和無符號版本

3.1.3 整型short,int,long,longlong

1short 至少16位

2int 至少與short 一樣長 最多32位

3long 至少32位 且至少與int 一樣長 最多64

4longlong 至少64位 且至少與long 一樣長 。

位於位元組

計算機記憶體的基本單元是位(bit)

位元組(byte)通常指的是8位的記憶體單元,位元組就是描述計算機記憶體量的度量單位

c++對位元組的定義為:c++位元組由至少能夠容納實現的基本字符集的相鄰位組成,也就是說,可能取值的數目必須等於或超過字元數目

術語 八位組(octet)表示8位位元組

16位的int的取值範圍為-32768到+32767

sizeof運算子返回型別或變數的長度,單位為位元組(運算子是內建的語言元素,對乙個或多個資料進行運算,並生成乙個值例如,加好運算子+將兩個值相加)。標頭檔案climits中包含了關於整型限制的資訊,具體地說,它定義了表示各種限制的符號名稱,例如int_max為int的最大取值,char_bit為位元組的位數。

使用sizeof 運算子 得到結果

int is 4 bytes     1byte=8bit  1:8 一位元組等於8位(位元)

1~~ 運算子sizeof 和標頭檔案 limits

cout<<"int is"#include

int_max表示型別int 能夠儲存的最大值

在c++編譯過程中,首先將源**傳遞給預處理器,在這裡#define和#include一樣,也是乙個預處理器編譯指令。該編譯指令告訴預處理器;在程式中查詢int_max,並將所有的int_max都替換成32767,因此#define編譯指令的工作方式與文字編輯器或字處理器中的全域性搜尋並替換命令相似。

2初始化 

初始化將賦值與宣告合併在一起

int n_int = int _max

3.c++11初始化方式

這種方式用於陣列和結構,但在c++98中,也可用於單指變數;

int hamhurgers =   ;

int hamhurgers    ;

int hamhurgers  {};   大括號內可以不寫任何東西 在這種情況下 變數將被初始化為0;

c++使用不同的方式來初始化不同的型別,初始化類變數的方式不同於初始化常規結構的方式,而初始化常規結構的方式又不同於初始化簡單變數的方式;通過使用c++新增的大括號初始化器,初始化常規變數的方式與初始化類變數的方式更像,c++11使得可將大括號初始化器用於任何型別,這是一種通用的初始化語法。

3.1.4無符號型別

四種整形型別 

short int long longlong 這四種整形都有一種不能儲存負數值的無符號變體,其優點是可以增大變數能夠儲存的最大值。  short-32768 到 +32767  無符號版本的表示範圍是 0-65535

僅當數值不會為負時才應使用無符號型別,如人口、粒數等。要建立無符號版本的基本型別,只需使用關鍵字unsigned來修改宣告即可:

unsigned  short change;

unsigned  int  rovert

unsigned quarterback

unsigned  long gone 

unsigned  long long  lang_lang

注意  unsigned 本身是 unsigned int 的縮寫 

3.1.5選擇整形型別

int 被設定為對目標計算機而言最為「自然」的長度。自然長度(natural size) 指的是計算機處理起來效率最高的長度

如果變數表示的值不可能為負時,則可以使用無符號型別,這樣變數可以表示更大的值。

如果知道變數可能表示的整數值大於16位整數的最大可能值,則使用long,即使系統上位int位32位,也應該這麼做,這樣,將程式移植到16位系統時,就不會突然無法正常工作,如果要儲存的值超過20億,可使用long long 

如果 short比int小 ,則使用short可以節省記憶體,僅當有大型整數陣列時,才有必要使用short(使用short陣列 不會應為 位的增加而用於儲存陣列的記憶體量增加)

如果只需要乙個位元組(byte),可使用char 

3.1.6 整型字面值(常量)

c++能夠以三種不同的技術方式在書寫整數:基數為10、基數為8(老式unix版本)和基數為16(硬體黑客的最愛)

c++使用前一(兩)為來標識數子常量的基數。 如果第一位為1~9,則基數為10(十進位制)因此93是以10為基數的。如果第一位為0,第二位為1~7,則基數為8(八進位制);因此042的基數為8,它相當於十進位制數的34,如果前兩位為0x 0x則基數為16(十六進製制)因此0x42為十六進製制相當於十進位制數66,a~f和a~f表示了十六進製制數相對於10~15,0xa5(10個16加5個1) 為165;

在預設情況下,cout 以十進位制格式顯示整數

不管是什麼數值,計算機都將以相同的方式儲存到計算機中---被儲存的二進位制數(以2為基數)

如果要以十六進製制和八進位制格式顯示整數,可以使用cout的一些特殊特性,標頭檔案提供了endl重起一行, 還提供了控制符dec、hex、oct,分別用於指示cout 以十進位制,十六進製制,八進位制格式顯示整數

coutc++預設將整型常量儲存為int型別。

字尾方面  l或l表示long常量  u或u字尾表示 unsigned int 常量 ul或lu表示unsigned long常量(因為1和l容易混淆 所以應該使用l來座位字尾) c++11中提供了 表示型別long long  字尾ll和ll還提供了用於表示型別unsigned long long 的字尾ull,ull、ull、ull

在將40000表示為long 的計算機系統中,十六進製制0x9c40(40000)將被表示為unsigned int 這是因為十六進製制常用來表示記憶體位址,而記憶體位址是沒有符號的,因此 unsigned int 比long 更適合用來表示16位的位址

3.1.18 char 型別 :字元和小整數

C Primer Plus 第三章筆記

1.變數名命名需注意 以兩個下劃線或下劃線和大寫字母打頭的名稱被保留給實現使用 以乙個下劃線開頭的名稱被保留給實現,用作全域性識別符號。2.對型別名使用 sizeof 運算子時,應將名稱放在括號中,但對變數名使用時括號可選。3.標頭檔案 climits 定義了符號常量來表示型別的限制。4.若不對函式...

C Primer Plus 第三章筆記

他們都是無符號的 char16 t 用 u表示 char32 t用u表示 bool 非0都是true 盡量用const而不是 define來作為常量標註 1來可以限定型別,2來可以限定作用域範圍 float型別的儲存方式 計算機會分別儲存兩部分 1部分儲存的是值,另一部分是儲存對值得縮小放大倍數 1...

C primer plus第三章筆記

注意位 bit 位元組 byte 的區分.1bite可以為1或0,1b 位元組 256b 位 1kb 1024b.但在有的程式語言中位元組未必包含8位.舉例來講 int a 有以下四種種情況 sizeof a sizeof a sizeof a sizeof a 3.相對於c語言新的初始化方法 in...