跟我一起學習C++ 之 初識變數和基本型別 之 內建型別

lhb_immortal發表於2014-07-07

宣告

            本人自學C++, 沒有計算機基礎,在學習的過程難免會出現理解錯誤,出現風馬牛不相及的現象,甚至有可能會貽笑大方。 如果有幸C++大牛能夠掃到本人的部落格,誠心希望大牛能給予批評與指正!不勝感激!
            學習的過程分為初識、入門、進階三個階段。
            因為對C++沒有什麼瞭解,這樣的學習設定可能也有失準確性。望兄弟們多指點。謝謝!


科普:有效數字

     有效數字是指一個數,從左邊第一個非0數開始到末位最後一個數字 ,都被稱為這個數的有效數字。比如0.009900,左邊第一非0數字為9,後面還有3個數字,這4個數字都是有效數字。

1. 主要內建資料型別
      還記得我們在初識C++時寫的hello world麼? 那幾行程式碼中,我們見到過這樣一個單詞:int 。當時我只是簡單說了下,這是C++的一種內建資料型別。今天我們來一起學習下C++都有哪些內建資料型別,都有什麼特點。
  
   1.1 首先我們來了解下,C++都定義了哪些資料型別
       C++ 定義了一組表示整數、浮點數、單個字元和布林值的算術型別。另外還定義了一種特殊型別:void。
       void 型別沒有對應的值,通常用作無返回值函式的返回型別。
       這幾種型別呢,在C++中又可以分成兩大類:整型和浮點型(void型別除外)。
       我們從以下幾個方面來分析資料型別:
       定義方式及表示方式
       C++最小請求記憶體空間--儲存空間
       對於整型還涉及是否帶符號
       賦值

  1.2 整形和浮點型 

      1.2.1 整型

       整型根據不同的依據可以進行不同的分類。比如根據資料型別可以分為:整數,單個字元,布林型別 ; 可以根據是否帶符號分為:帶符號與不帶符號的型別。

       分類一:整數、單個字元、布林型別
       數字
       定義方式:int a=1; short a=1; long a=1;
       不同型別的儲存空間:
       比如int:16位作業系統是2個位元組,32/64位作業系統4個位元組,也就是32bits,
       比如long:64位作業系統,除了受到機器位數的影響,還受到資料模型(不是資料庫的資料模型)影響,LLP64模型中long是32位外,LP64、ILP64、SILP64的long都是64位。
       我們這裡所說的最小儲存空間,是指綜合不同處理能力的CPU(比如32位的64位的)以及資料模型進行對比的,某個資料型別所需要的最小空間。比如int 型別,最小儲存 空間是2個位元組(16 bits), 如果請求的空間小於這個值,就會報錯,而當前計算機的執行能力,一般分配給int型別的儲存 空間為4個位元組(32位),而空間的分配,是編譯器自動分配的,不需要人為參與。至於自定義資料型別的空間如何分配,等 以後我們學到了,再去了解。
          int   16bits
          short 16bits
          long  32bits

       單個字元
       定義方式:char a='a';  wchar_t a='我';
       最小請求儲存空間:
          char    8bit
          wchar_t 16bit

       布林型別
       定義方式: bool a = true; boll a=false;在程式裡,true 返回1,false 返回0;
       最小請求空間:無。
       
       
       分類二:帶符號與不帶符號的型別
       除布林型別外,其他整型值都可以分成帶符號的或者不帶符號的
       
       整數:
       帶符號型別可以表示所有整數(包括負整數,0,正整數),不帶符號的,只能表示非負整數。而預設情況下,都是帶符號的(signed),如果想定義為不帶符號的(unsigned) 型別則需要使用關鍵字unsigned
       
       定義方式: unsigned (int) ,unsigned short unsigned long.
           注意: unsigned int 中的int 可以省略,也就是說unsigned 預設表示為 不帶符號的int型別。
           
       至於字元型別:
       也分為帶符號的與不帶符號的。但是與整數不同,字元型別分為plain char,unsigned char,signed char 雖然分為三種型別,卻只有兩種表示方式。你肯定要問為什麼了。兩種表示方式肯定是unsigned 和 signed的兩種。那plain char又是什麼呢?
       plain char 只是一種稱謂,它可以是signed char 也可以是unsigned char,那到底是哪個呢?這具要預設由編譯器來決定,當然你也可以自己決定 ,g++ 編譯器有4個引數:
       -funsigned-char
       -fno-signed-char
       -fsigned-char
       -fno-unsigned-char
       前兩個引數將char型別設定成unsigned char,後兩個引數告訴編譯器將char型別全部識別為signed char
       
       取值範圍:
       無符號型別,所有位數都表示數值,帶符號型別,策略上保留一位用作符號位,符號位為1為負數,0則為非負數。
       正是因為符號位的存在,導致帶符號型別與無符號型別數值的取值範圍存在差異。
       帶符號型別被分配16位空間,取值範圍為:-2 -15次方(至少是-2 -15次方加1)至2的15次方減1,而不帶符號型別,取值範圍為0至2的16次方減1。
       假如int被分配出8位的空間,不帶符號的取值範圍為-127~127(有的環境裡可以取到-128),帶符號的取值範圍為0~255.
       
       賦值:
       關於整型的賦值,我們這裡只說下整數的賦值。賦值在某個型別的取值範圍內,那賦值很簡單,比如:unsigned a=254;
       但是如果越出了取值範圍呢?要分是否帶符號進行分別對待
       不帶符號的情況 :
       假設在8位的儲存空間中,取值範圍是0~255,如果是256怎麼辦呢? C++中會對兩個值進行加減運算。如果大於255則進行減法運算(賦值-最大值),如果小於0,則進行加法運算,比如-1,賦值的結果,會是254,相當於-1+255
       帶符號的情況:
       一般情況下,帶符號的型別,賦值超出取值範圍,會像不帶符號的型別那樣進行加減運算,但是並不一定所有編譯器都會是這樣的處理的。
       
       
      1.2.2       浮點型
       
       型別 float、 double 和 long double 分別表示單精度浮點數、雙精度浮點數和擴充套件精度浮點數。一般 float 型別用一個字(32 位)來表示,double 型別用兩個字(64 位)來表示,long double 型別用三個或四個字(96 或 128 位)來表示。型別的取值範圍決定了浮點數所含的有效數字位數。

2. 字面值常量(2014-07-14更新)
1. 什麼是字面值常量
   痛苦死啊~對於字面值常量這一節,兩個星期前就看了幾遍,可是就是不是很明白到底是什麼東西。放了兩個星期,今天再來看,思路已經有些很清晰了。
   其實字面值常量,是未定義而被直接使用的內建基本型別(除short型別外),其特點是不能修改,用值本身進行命名。
   需要注意的是: 只有內建資料型別有字面值常量,沒有類型別的字面值常量,所以也沒有標準庫字義的字面值。內建型別中,沒有short型別的字面值
2. 字面值常量的表現形式(ASCII)
     十進位制: 20
     八進位制: \024   -- ASCII 用 8進位制 表示需要以\ 開頭
   十六進位制: \x14   -- ASCII 用16進位制 表示需要以\x開頭

3. 字元與字串
   單個字元 需要以單引號: '' 來引用
   字串   需要以雙引號: "" 來引用 ,為了相容 C 語言,C++ 中所有的字串字面值都由編譯器自動在末尾新增一個空字元
   如:'A' 就是字元A,"A" 則是單字元A+空格 兩個字元。

4. 整型的不同使用方式
型別
表現方式
int(整數型別中預設為Int 或long 根據字面值大小自動決定)
變數: int a=1;      常量:1
short
變數:short int a;  常量:
long
變數:long int a;   常量:1L(L 可以是小寫,但是建議使用大寫,小寫容易與數字1混淆)
char
變數:char n='a';   常量:'a'
wchar_t
變數:wchar_t n;   常量:'a'L
float
變數:float n;          常量:0.1314f 或者0.1314F
double(浮點型別中預設為double)
變數:double n;     常量:0.1314
long double
變數:long double n; 常量:0.1314L
布林
true 或者 false
不帶符號(我們知道預設是帶符號的)
10u(不帶符號的整型) 、10Lu(不帶符號的長整型)、 10LU(不帶符號的長整型)

5. 字元(串)連線

std:cout<
std:cout<
std:cout< "world"<
std:cout<

std:cout< lo w\
orld"< 注意反斜線符號必須是該行的尾字元——不允許有註釋或空格符。同樣,後繼行行首的任何空格和製表符都是字串字面值的一部分。正因如此,長字串字面值的後繼行才不會有正常的縮排  

6. 字面值常量會在什麼情況下出現

   std::cout // 指標的定義和賦值。
    其他情況尚未想到,如果哪位仁兄發現還有其他情況,辛苦辛苦指點下小弟。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25313300/viewspace-1210916/,如需轉載,請註明出處,否則將追究法律責任。

相關文章