跟我一起學習C++ 之 初識變數和基本型別 之 內建型別
宣告:
本人自學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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 跟我一起學習C++ 之 初識C++C++
- c++基本型別和變數C++型別變數
- python學習之變數型別Python變數型別
- js基本語法之 值型別(資料型別)(變數型別)JS資料型別變數
- Python學習四之變數型別Python變數型別
- 跟我一起學習C++ 之 初識名稱空間C++
- (一)Flutter學習之Dart變數和型別系統FlutterDart變數型別
- 02.內建變數型別變數型別
- js資料型別之基本資料型別和引用資料型別JS資料型別
- 跟我一起學.NetCore之選項(Options)核心型別簡介NetCore型別
- 第2章 變數和基本型別變數型別
- C++中的基本變數型別介紹C++變數型別
- C++基本型別雜湊值學習C++型別
- C++入門教程(5):基本資料型別和變數C++資料型別變數
- c++中變數型別C++變數型別
- 《C++ Primer》 ---- 關於變數 與 基本型別C++變數型別
- 草根學 Python(二)基本資料型別和變數Python資料型別變數
- 草根學Python(二)基本資料型別和變數Python資料型別變數
- Java學習--Java 中基本型別和字串之間的轉換Java型別字串
- 開心檔之Java 變數型別Java變數型別
- Mysql 資料型別之整數型別MySQL 資料型別
- C++教程-----C++變數型別和變數的定義C++變數型別
- Python學習 —— 內建資料型別Python資料型別
- Hive學習之型別轉化Hive型別
- 學習變數的目的及基本資料型別介紹變數資料型別
- C#變數型別(1):引用型別和值型別 (轉)變數型別
- 《JavaScript 闖關記》之變數和資料型別JavaScript變數資料型別
- 基本資料型別之字串資料型別字串
- Javascript 之基本包裝型別JavaScript型別
- C#學習筆記之值型別與引用型別C#筆記型別
- C++ 變數型別查詢C++變數型別
- C++中變數的型別C++變數型別
- rust學習三、基本型別Rust型別
- JavaScript基本資料型別之undefined和nullJavaScript資料型別UndefinedNull
- C C++變數型別大小和範圍C++變數型別
- 【MySQL資料型別1之--數值型別】MySql資料型別
- 腦圖學習 JavaScript 之犀牛書【三 · 二】型別轉換、變數JavaScript型別變數
- js基本型別和引用型別區別JS型別