C++基礎入門筆記(二)數據型別基礎

2020-08-12 14:16:24

C++基礎入門筆記(二)數據型別基礎

你學或不學,C++就在那裏,不停地勾引着你

內容基於黑馬程式設計師c++課程講義,自己補充新增了一小小部分,放在這裏作爲自己日後複習的參考。(強烈推薦這個入門課程,B站上就有哦)

2 數據型別

C++規定在建立一個變數或者常數時,必須要指定出相應的數據型別,否則無法給變數分配記憶體

數據型別存在的意義:就是給變數分配合適的記憶體空間,以儲存變數表示的數據內容

什麼叫合適?比如:儲存 10 這個數位,int(4個字元)的空間就夠了,如果使用 long(8個字元)就會造成記憶體空間的浪費。

2.1 整型

作用:整型變數表示的是整數型別的數據

C++中能夠表示整型的型別有以下幾種方式,區別在於所佔記憶體空間不同,能表示的數值範圍不同:

數據型別 佔用空間 取值範圍
short(短整型) 2位元組 (-2^15 ~ 2^15-1)
int(整型)(用的最多) 4位元組 (-2^31 ~ 2^31-1)
long(長整形) Windows爲4位元組,Linux爲4位元組(32位元),8位元組(64位元) (-2^31 ~ 2^31-1)
long long(長長整形) 8位元組 (-2^63 ~ 2^63-1)

note:變數佔用空間越大,所能表示的數值範圍就就越大。

#include<iostream>
using namespace std;

int main() 
{
	//1、短整型(-32768~32767)
    //short num1 = 10; //沒有超出空間儲存值的範圍,能夠正常顯示
    short num1 = 32768; //超出了儲存範圍,會顯示錯誤 num1=-32768
    
    //2、整型
    int num2 = 32768;//沒有超出空間儲存值的範圍,能夠正常顯示
    
    //3、長整形
    long num3 = 10;
    
    //4、長長整型
    long long num4 = 10;
    
    //輸出上述幾個數
    cout << "num1=" << num1 << endl;
    cout << "num2=" << num2 << endl;
    cout << "num3=" << num3 << endl;
    cout << "num4=" << num4 << endl;
    
	system("pause");
	return 0;
}

2.2 sizeof關鍵字

作用:利用sizeof關鍵字可以==統計數據型別或者變數所佔記憶體大小==

​ 所以數據型別所佔記憶體大小不用專門去記,sizeof一下就OK了

語法: sizeof( 數據型別 / 變數)

範例:

#include<iostream>
using namespace std;

int main() 
{
	//整型:short		int		long		long long
    //可以用sizeof求出數據型別佔用記憶體的大小
    
    short num1 = 10;
    cout << "short 型別所佔記憶體空間爲:" << sizeof(num1) << endl;
    
    int num2 = 10;
    cout << "int 型別所佔記憶體空間爲: " << sizeof(num2) << endl;
    
    long num3 = 10;
    cout << "long 型別所佔記憶體空間爲: " << sizeof(num3) << endl;
    
    long long num4 = 10;
    cout << "long long型別所佔記憶體空間爲: " << sizeof(num4) << endl;
    
	
    cout << "short 型別所佔記憶體空間爲: " << sizeof(short) << endl;

	cout << "int 型別所佔記憶體空間爲: " << sizeof(int) << endl;

	cout << "long 型別所佔記憶體空間爲: " << sizeof(long) << endl;

	cout << "long long 型別所佔記憶體空間爲: " << sizeof(long long) << endl;

	system("pause");

	return 0;
}

整型結論

  • 佔用空間:short < int <= long <= long long

2.3 實型(浮點型)

作用:用於表示小數

浮點型變數分爲兩種:

  1. 單精度float
  2. 雙精度double

兩者的區別在於表示的有效數位範圍不同。(注意有效數位也包括小數點前的數位)

數據型別 佔用空間 有效數位範圍
float 4位元組 7位有效數位
double 8位元組 15~16位元有效數位

範例:

#include<iostream>
using namespace std;

int main() {
	
    //預設情況下,輸出一個小數,會顯示六位有效數位
    
	float f1 = 3.14f; //3.14後新增f的原因:沒有f的話,編譯器見到3.14會先預設其爲double型,再將其轉換爲float,而加上f後就直接視爲float
	double d1 = 3.1415926; //顯示:3.14159,因爲預設爲6位有效數位

	cout << f1 << endl;
	cout << d1<< endl;
	
    //統計float和double佔用記憶體空間,sizeof歡迎您
	cout << "float  sizeof = " << sizeof(f1) << endl;
	cout << "double sizeof = " << sizeof(d1) << endl;

	//科學計數法,e後爲正數:*10^ ; e後爲負數: *0.1^ 
	float f2 = 3e2; // 3 * 10 ^ 2 
	cout << "f2 = " << f2 << endl; //顯示爲300

	float f3 = 3e-2;  // 3 * 0.1 ^ 2
	cout << "f3 = " << f3 << endl; //輸出爲0.03

	system("pause");

	return 0;
}

2.4 字元型

作用:字元型變數用於顯示單個字元

語法:char ch = 'a';

注意1:在顯示字元型變數時,用單引號將字元括起來,不要用雙引號

注意2:單引號內只能有一個字元,不可以是字串

  • C和C++中字元型變數只佔用==1個位元組==。
  • 字元型變數並不是把字元本身放到記憶體中儲存,而是將對應的ASCII編碼放入到儲存單元
  • 也就是說每一個字元都對應着一個數字編號,電腦把這個數位轉換爲二進制數再存到記憶體中去

範例:

#include<iostream>
using namespace std;

int main() {
	//學習字元型的幾個步驟:
    //1、字元型變數的建立方式
    char ch = 'a';
    cout << ch << endl;
    
    //2、字元型變數所佔記憶體的大小
    cout << "char字元型變數佔用記憶體空間爲:" << sizeof(char) << endl;
    
    //3、字元型變數常見錯誤
    //char ch2 = "b"; //報錯,不能用雙引號
    //char ch2 = 'abcdef'; //報錯,只能有一個字元
    
    //4、字元型變數對應的ASCII編碼
    cout << "字元a對應的ACSII碼值爲:" << (int)ch << endl; //(int)爲強制型別轉換,將ch轉換爲int型
    cout << "字元A對應的ASCII碼值爲:" << (int)'A' << endl;
    //要記的常用的:
    //a  --  97
    //A  --  65
    
    //可以用ASCII值給字元型賦值
    char ch3;
    ch3 = 97;
    cout << "ASCII碼97表示的字元是:" << ch3 << endl;
    
    
    cout << "\n**********課件原有內容**********" << endl;
	//char ch = 'a';
	cout << ch << endl;
	cout << sizeof(char) << endl;

	//ch = "abcde"; //錯誤,不可以用雙引號
	//ch = 'abcde'; //錯誤,單引號內只能參照一個字元

	cout << (int)ch << endl;  //檢視字元a對應的ASCII碼
	ch = 97; //可以直接用ASCII給字元型變數賦值
	cout << ch << endl;

	system("pause");

	return 0;
}

ASCII碼錶 碼表格:

ASCII 控制字元 ASCII 字元 ASCII 字元 ASCII 字元
0 NUT 32 (space) 64 @ 96
1 SOH 33 ! 65 A 97 a
2 STX 34 " 66 B 98 b
3 ETX 35 # 67 C 99 c
4 EOT 36 $ 68 D 100 d
5 ENQ 37 % 69 E 101 e
6 ACK 38 & 70 F 102 f
7 BEL 39 , 71 G 103 g
8 BS 40 ( 72 H 104 h
9 HT 41 ) 73 I 105 i
10 LF 42 * 74 J 106 j
11 VT 43 + 75 K 107 k
12 FF 44 , 76 L 108 l
13 CR 45 - 77 M 109 m
14 SO 46 . 78 N 110 n
15 SI 47 / 79 O 111 o
16 DLE 48 0 80 P 112 p
17 DCI 49 1 81 Q 113 q
18 DC2 50 2 82 R 114 r
19 DC3 51 3 83 S 115 s
20 DC4 52 4 84 T 116 t
21 NAK 53 5 85 U 117 u
22 SYN 54 6 86 V 118 v
23 TB 55 7 87 W 119 w
24 CAN 56 8 88 X 120 x
25 EM 57 9 89 Y 121 y
26 SUB 58 : 90 Z 122 z
27 ESC 59 ; 91 [ 123 {
28 FS 60 < 92 / 124 |
29 GS 61 = 93 ] 125 }
30 RS 62 > 94 ^ 126 `
31 US 63 ? 95 _ 127 DEL

ASCII 碼大致由以下兩部分組成:

  • ASCII 非列印控制字元: ASCII 表上的數位 0-31 分配給了控制字元,用於控制像印表機等一些外圍裝置。
  • ASCII 列印字元:數位 32-63-95-126 分配給了能在鍵盤上找到的字元,當檢視或列印文件時就會出現。

要記住的:

​ A – 65 ; a – 97

2.5 跳脫字元

作用:用於表示一些==不能顯示出來的ASCII字元==

現階段我們常用的跳脫字元有:\n \\ \t

跳脫字元 含義 ASCII碼值(十進制)
\a 警報 007
\b 退格(BS) ,將當前位置移到前一列 008
\f 換頁(FF),將當前位置移到下頁開頭 012
\n 換行(LF) ,將當前位置移到下一行開頭 010
\r 回車(CR) ,將當前位置移到本行開頭 013
\t 水平製表(HT) (跳到下一個TAB位置) 009
\v 垂直製表(VT) 011
\\ 代表一個反斜線字元 \ 092
\’ 代表一個單引號(撇號)字元 039
\" 代表一個雙引號字元 034
? 代表一個問號 063
\0 數位0 000
\ddd 8進位制跳脫字元,d範圍0~7 3位8進位制
\xhh 16進位制跳脫字元,h範圍09,af,A~F 3位16進位制

範例:

#include<iostream>
using namespace std;

int main() {
	
	//跳脫字元
    cout << "換行了\n" << "水平製表符\t相當於Tap一次,輸出一個反斜槓\\" << endl; 
    
    //反斜槓
	cout << "\\" << endl;
    
	//水平製表符(相當於8個字元),輸出時像是一個表格,可以整齊的輸出數據
    cout << "aaaa\tHelloWorld" << endl;
    cout << "aa\tHelloWorld" << endl;
    /*輸出爲:
    aaaa    HelloWorld
    aa      HelloWorld
    */
    
    cout << "\tHello" << endl;
	//換行符
    cout << "\n" << endl;

	system("pause");

	return 0;
}

2.6 字串型

作用:用於表示一串字元

兩種風格

  1. C風格字串char 變數名[] = "字串值"

    注意事項:與字元型相比

    ​ 1. 多了個方括號[]

    ​ 2. 字串用的是雙引號" "

    範例:

int main() {

char str1[] = "hello world"; //與字元型相比,多了個方括號[],字串用的是雙引號""
cout << str1 << endl;
   
system("pause");

return 0;

}


> 注意:C風格的字串要用雙引號括起來

2. **C++風格字串**:  `string  變數名 = "字串值"`

範例:

```C++
#include<iostream>
#include<string>
using namespace std;

int main() {

//2、c++風格字串
 string str1 = "Hello World";
 string str = "hello world";
 cout << str1 << endl;

 system("pause");

 return 0;
}

注意:C++風格字串,需要加入標頭檔案#include<string>

​ VS2019中好像不加標頭檔案也能直接定義string了?

2.7 布爾型別 bool

作用:布爾數據型別代表真或假的值

bool型別只有兩個值:

  • true — 真(本質是1)
  • false — 假(本質是0)
  • 條件判斷時:非0的int都是真

bool型別佔1個位元組大小

範例:

#include<iostream>
using namespace std;

int main() 
{
	//1、建立bool數據型別
    bool flag1 = true; //真
    cout << "flag1 = true時,flag1的值爲:" << flag1 << endl;
    cout << "也就是說true就是" << flag1 << endl;
    
    flag1 = false; //更改flag1的值
    cout << "flag1 = false時,flag1的值爲:" << flag1 << endl;
    //2、檢視bool型別所佔記憶體空間
    cout << "bool型別所佔記憶體空間爲:" << sizeof(flag1) << "個位元組" << endl;
    
    cout << "\n**********課件原有內容**********" << endl;
    bool flag = true;
	cout << flag << endl; // 1

	flag = false;
	cout << flag << endl; // 0

	cout << "size of bool = " << sizeof(bool) << endl; //1
	
	system("pause");

	return 0;
}

2.8 數據的輸入

作用:用於從鍵盤獲取數據

**關鍵字:**cin

語法: cin >> 變數

範例:

#include<iostream>
#include<string>
using namespace std;

int main()
{
    //各種已學型別從鍵盤上的輸入
    
    //1、整型
    //建立一個整型
    int a = 10;
    cout << "請給整型變數a賦值:" << endl;
    cin >> a;
    cout << "您輸入的整型變數a的值爲:"<< a << endl;
    
    //2、浮點型(實型)
    float f = 3.14f;
    cout << "請給浮點型變數f賦值:" << endl;
    cin >> f;
    cout << "您輸入的浮點型變數f的值爲:"<< f << endl;
    
    //3、字元型 
    char ch = 'a';
    cout << "請給字元型變數ch賦值:" << endl;
    cin >> ch;
    cout << "您輸入的字元型變數ch的值爲:"<< ch << endl;
    
    //4、字串型(常用的是C++風格字串)
    string str = "Hello world";
    cout << "請給字串型變數str賦值:" << endl;
    cin >> str;
    cout << "您輸入的字串型變數str的值爲:"<< str << endl;
    
    //5、布爾型別
    bool flag = false;
    cout << "請給布爾型別變數 flag賦值:" << endl;
    cin >> flag; //輸入爲非0的int時,輸出爲1,但輸入爲字母時,輸出爲0
    cout << "您輸入的布爾型別變數flag的值爲:"<<  flag << endl;
    
    
    
    cout << "\n**********課件原有內容**********" << endl;
	//整型輸入
	int a = 0;
	cout << "請輸入整型變數:" << endl;
	cin >> a;
	cout << a << endl;

	//浮點型輸入
	double d = 0;
	cout << "請輸入浮點型變數:" << endl;
	cin >> d;
	cout << d << endl;

	//字元型輸入
	char ch = 0;
	cout << "請輸入字元型變數:" << endl;
	cin >> ch;
	cout << ch << endl;

	//字串型輸入
	string str;
	cout << "請輸入字串型變數:" << endl;
	cin >> str;
	cout << str << endl;

	//布爾型別輸入
	bool flag = true;
	cout << "請輸入布爾型變數:" << endl;
	cin >> flag;
	cout << flag << endl;
	system("pause");
	return EXIT_SUCCESS;
}