c primer 學習筆記1 基本內建型別

2021-07-05 16:25:36 字數 3536 閱讀 6887

2.1 基本內建型別

2.1.1 算術型別

在c++

語言中,算術型別分為兩類,分別為整形和浮點型。整型包括整型,長整型,短整型。浮點型包括單精度浮點型和雙精度浮點型。另外還有字元型和布林型別等。在每種算術型別中都定義了固定型別的尺寸,比如

int整型為

16位,短整型

short

也是16

位,字元型

char為8

位,長整型

long

為32.

有些編譯器容許的

long  long為64

位。在浮點型中,

float為6

位有效數字,而

double為10

位有效數字,在

c++11

標準中的

long double為10

位有效數字。

另外,值得注意的是,c++

規定乙個

int至少與乙個

short

一樣大。乙個

long

至少與乙個

int一樣大,乙個

longlong

至少與乙個

long

一樣大。

2.1.1-1

內建型別的機器實現

在計算機中,計算機以位元序列儲存資料,每個位元是非0即1.

也即是只有0和

1.比如

01101001010100.

大多數計算機以2

的整數次冪個位元作為塊來處理記憶體。最小的記憶體塊,我們稱作位元組,儲存的基本單元為字,乙個字包括若干個位元組。語法規定乙個位元組至少能夠容納下基本字符集中的字元。一般來說,乙個位元組由

8位元組成。字由32或

64位元組成。也就是說乙個字包括4個或

8個位元組。

2.1.1-2

帶符號型別和無符號型別

我們說除去布林型別以外,所以整型可以劃分為帶符號的和無符號的兩種,帶符號的可以表示正數,0

,負數,而無符號的,可想而知只有正數了。通常我們所寫的

int,

short

,long

,long long

等都是帶符號的,而如果想讓他們變成無符號的型別,只需要在他們前面加上

unsigned

,比如unsigned int 

,unsigned long

。如果只寫

unsigned

,那麼表示的是

unsigned int。

和整型不同,字元型有三種表示,分別是char

,unsigned char

, signed char

。注意char 

和signed char 

是不一樣的,其實

char

可以表示以上兩種,具體哪個要看編譯器了。

2.1.1練習

解答1.int為整型,它是

16位大小,

short

為短整型也是

16位。

long 

,longlong

都是長整型,他們分別為

32位和

64位。有符號型別和無符號型別的區別是在整型裡,有符號型別可以表示

0,正數,負數。而無符號型別只能表示大於

0的數。

float

和double

在記憶體中所佔的位元數不同,

float

大概佔32

個位元。而

double佔64

位元或128

位元。還有他們所表示的有效數字位數不同,

float為6

位,double為10

位。 2.1.2

型別轉換

顯而易見,型別轉換就是把一種型別轉換成另外一種型別,這個比較簡單,舉個例子吧

bool b=42;這是

b的值時

1.注意

b是布林型啊!

int i=b;這時i是

1;i=3.14;這時

i的值為

3,注意

i是整形,沒有小數啊。

double pi=i;注意這是

pi的值是

3.0,為什麼呢,因為

double

是浮點型啊,必須有小數。

unsighed char c = -1; 大家注意這個就很奇怪了,我們知道無符號型別只能表示大於

0的數,而如果把它輸入進入,結果值是

255呢?

sighed char c2=256;這個是未定義的。。。

現在回答上面的問題,注意,如果我們賦給乙個無符號型別值超出它的表示範圍,那麼它最終的結果是該值對他所表示的最大值加一那個數取模後的餘數。

2.1.2-1

含有無符號型別的表示式

舉例來說。比如乙個表示式既有無符號數又有int

值的時候,那麼那個

int值會轉換為無符號數。比如

unsigned u=10;

int i=-42;

cout,但是第二個麻煩就來了,顯示的結果是

4294967264.

這是為什麼呢?

原因在於如果int

與乙個無符號數相加,那麼

int會轉換成無符號數。就是把

-42轉成無符號的。就相當於這個

-42加上這個無符號數的模。這個無符號數的模是

4294967296+10.

對吧?所以結果就是它加上

-42。這下是不明白了??

如果不理解再來,

unsigned u1=42,u2=10;

cout,沒問題,第二個結果是

4294967264

,為什麼?跟上面一樣的

-42+4294967296+10.

就行了。

2.1.2練習

unsigned u=10,u2=42.

cout第乙個式子結果是

32,第二個式子結果是

4294967264

int i=10,i2=42;

cout):32;2

):-32;3

):0;4

):0;

2.1.3  

字面值常量

整型與浮點型字面值

我們把整型字面值可以寫成十進位制,八進位制,十六進製制等。以0

開頭的整數代表八進位制,以

0x開頭代表十六進製制。在預設情況下,十進位製字面值是帶符號的。八進位制和十六進製制是帶符號或不帶符號的。十進位製字面值是

int,

long

,longlong

中最小的那個。注意十進位製字面值不會是負數。預設的,浮點型字面值是乙個

double。

字元與字串字面值

由單引號括起來的是char

型字面值。由雙引號括起來的是字串型字面值。字串字面值是由常量字元構成的陣列。在每個字串結尾處新增乙個空字元。。因此,其實際長度比他的內容多

1.,比如

'a'代表的是字元

a。而「

a」代表的是乙個字元陣列。這個陣列裡面有字元

'a',

和空字元。

C Primer 學習筆記 1 基本語言

std endl 注意 效果不僅僅是換行,還會重新整理緩衝區,以便立即看到結果。在debug過程中的log應該每句都用endl重新整理緩衝區,避免因崩潰導致的緩衝區資訊丟失,造成除錯誤導。ms dos視窗中輸入ctrl z來輸入檔案結束符 注意 在一些簡短的小測試程式中,經常會用while std ...

c primer學習筆記 1

學習筆記只為幫助自己記憶,寫的並不嚴謹,以自己理解為主.若看到此文的人,發現錯誤請指出,非常感謝.還是以main函式為入口點,可以有返回值,也可以返回值為void,檔案字尾名為cpp 以不同編譯為準 int main 即c 的擴充套件函式庫 標準庫中用於基本標準輸出和輸入的庫 先看以下兩個方法 1 ...

c primer學習筆記1

1,main函式返回值必須是int型。2,iostream庫的基礎是istream和ostream的型別 4個io物件 cin 標準輸入 cout 標準輸出 cerr 標準錯誤 clog 標準日誌 3,域操作符 4,注釋符放在雙引號內是不會被解釋成注釋的,雙引號限制了注釋符的擴充套件。5,for和w...