面向?qū)ο缶幊蹋∣OP)的本質(zhì)就是設(shè)計(jì)并拓展數(shù)據(jù)類型的過(guò)程。設(shè)計(jì)自己的數(shù)據(jù)類型目的是為了讓數(shù)據(jù)得到匹配,如果開(kāi)發(fā)者可以順利做到這一點(diǎn),就不難發(fā)現(xiàn)以后使用數(shù)據(jù)就會(huì)容易得多。然而,在創(chuàng)建自己數(shù)據(jù)類型的前提是必須了解并掌握C++中內(nèi)置的數(shù)據(jù)類型,它們是創(chuàng)建自己數(shù)據(jù)類型的基礎(chǔ)條件。
內(nèi)置的數(shù)據(jù)類型分兩組:基本類型和復(fù)合類型。本章知識(shí)點(diǎn)主要介紹基本數(shù)據(jù)類型,即整數(shù)和浮點(diǎn)數(shù)。似乎只有兩種數(shù)據(jù)類型,但C++知道,沒(méi)有任何一種整型或浮點(diǎn)型可以滿足所有的編程需求,因此它對(duì)這兩種數(shù)據(jù)類型作了升級(jí)變形,后面會(huì)向大家介紹數(shù)組、字符串、指針和結(jié)構(gòu)。
簡(jiǎn)單的變量
程序在運(yùn)行的過(guò)程中往往都要存儲(chǔ)數(shù)據(jù),譬如王者榮耀需要存儲(chǔ)英雄的戰(zhàn)績(jī)、傷害值等。為了將數(shù)據(jù)存儲(chǔ)在計(jì)算機(jī)中,程序必須記錄三個(gè)基本屬性:
- 信息存儲(chǔ)在哪里
- 需要存儲(chǔ)什么值
- 存儲(chǔ)什么類型的信息
int harm;
harm = 900
例如上面的語(yǔ)句是在告訴程序,它正在存儲(chǔ)一個(gè)整數(shù),并使用名稱harm來(lái)表示該整數(shù)的值。計(jì)算機(jī)內(nèi)部實(shí)際上是找到一塊能夠存儲(chǔ)整數(shù)的內(nèi)存,將該內(nèi)存單元標(biāo)記為harm,并將900復(fù)制到該內(nèi)存單元中;然后在使用程序時(shí)便可以使用harm來(lái)訪問(wèn)這個(gè)內(nèi)存單元。
不過(guò)程序是不會(huì)告訴用戶,它具體存在哪個(gè)單元中,實(shí)際上可以使用&運(yùn)算符來(lái)檢索(查找)harm的內(nèi)存地址,在后面會(huì)向大家介紹指針知識(shí)時(shí)會(huì)講到。
變量名
在定義變量名時(shí)建議大家使用有一定含義的變量名。例如,你要定義一件商品的價(jià)格可以使用變量名price,而不是用x或者a、b等。
下面來(lái)說(shuō)一下起變量名時(shí)需要注意的事項(xiàng):
- 只能使用數(shù)字、字母和下劃線
- 變量中第一個(gè)字符不能是數(shù)字
- 變量名區(qū)分大小寫
- 不能將C++中的關(guān)鍵字用作名稱,如
cout、cin等 - 以兩個(gè)下劃線或者下劃線和大寫字母打頭的名稱被保留給編譯器和其要使用的資源使用。這句話可能有點(diǎn)繞,意思是這樣命名也沒(méi)有錯(cuò),但是會(huì)導(dǎo)致編譯器的行為具有不確定性,一般也不允許用戶這樣命名。
- C++一般對(duì)變量名的長(zhǎng)度沒(méi)有限制,只是有些平臺(tái)會(huì)對(duì)此限制。
另外,如果你想要表達(dá)的變量需要由幾個(gè)單詞組合而成,那么建議使用下劃線進(jìn)行拼接。例如,我現(xiàn)在要表達(dá)蘋果價(jià)格,我會(huì)這樣命名:apple_price
整型
整型其實(shí)非常好理解,它代表的是沒(méi)有小數(shù)部分的數(shù)字,如0,-5,98,1000,-2025等。現(xiàn)在思考一個(gè)問(wèn)題,計(jì)算機(jī)能夠存儲(chǔ)所有的整數(shù)嗎?
答案是顯而易見(jiàn)的,當(dāng)然是不能!
往往來(lái)說(shuō)為了存儲(chǔ)較大的數(shù)字,那么計(jì)算機(jī)中就得用較大的內(nèi)存來(lái)存儲(chǔ)。C++提供了好幾種整型的類型,為的就是不要浪費(fèi)過(guò)多的內(nèi)存。
C++中提供了char、short、int、long和C++11中新增了long long,每個(gè)版本都提供了有符號(hào)和無(wú)符號(hào)的版本。所謂有無(wú)符號(hào)的意思是,有符號(hào)的類型則可以表示正負(fù)數(shù);而無(wú)符號(hào)則表示不能存儲(chǔ)負(fù)數(shù)。
整型short、int、long和long long
計(jì)算機(jī)內(nèi)存由位(bit)的單元組成,不同長(zhǎng)度的整型也會(huì)由不同數(shù)目的位來(lái)存儲(chǔ)值,最多能表示4種不同的整數(shù)寬度。例如
- short至少16位
- int至少和short一樣長(zhǎng)
- long至少32位,且至少和int一樣長(zhǎng)
- long long至少64位,且至少與long一樣長(zhǎng)
計(jì)算機(jī)內(nèi)存的基本單位是位(bit)??梢詫⑽豢醋魇请娮娱_(kāi)關(guān),0代表關(guān),1代表開(kāi)。8位的內(nèi)存可以設(shè)置出256種不同的組合,每一位都有兩種設(shè)置。所以8位的總組合數(shù)為2×2×2×2×2×2×2×2=256。因此8個(gè)單元可以表示0-255或者是-128到127。每多一位那么組合數(shù)則會(huì)加倍。
字節(jié)(byte)通常指的是8位的內(nèi)存單元,從這個(gè)意義上說(shuō),字節(jié)是計(jì)算機(jī)內(nèi)存的度量單位。1KB=1024字節(jié)、1MB=1024KB
如果想要知道你的系統(tǒng)中的整數(shù)最大可以支持的長(zhǎng)度,可以使用c++中的工具sizeof實(shí)現(xiàn),以int類型為例,在不同的系統(tǒng)中它所表示的位數(shù)可能不同,可能是16位也可能是32位。
另外,除了iostream這個(gè)頭文件外,還需要添加一個(gè)新的頭文件climits,這個(gè)頭文件中包含了整型限制的信息。具體來(lái)說(shuō),是它定義了表示各種限制的符號(hào)名稱。例如:INT_MAX為int最大值,CHAR_BIT為字節(jié)位數(shù)。
limit.cpp
#include <iostream>
#include <climits>
int main()
{
using namespace std;
int n_int = INT_MAX;
short n_short = SHRT_MAX;
long n_long = LONG_MAX;
long long n_llong = LLONG_MAX;
cout << "int is " << sizeof(int) << " bytes" << endl;
cout << "short is " << sizeof n_short << " bytes" << endl;
cout << "long is " << sizeof n_long << " bytes" << endl;
cout << "long long is " << sizeof n_llong << " bytes" << endl;
cout << "maximum values: " << endl;
cout << "int: " << n_int << endl;
cout << "short: " << n_short << endl;
cout << "long: " << n_long << endl;
cout << "long: " << n_llong << endl;
cout << "minimum int value = " << INT_MIN << endl;
cout << "Bits per byte = " << CHAR_BIT << endl;
return 0;
}
輸出結(jié)果如下:
int is 4 bytes
short is 2 bytes
long is 4 bytes
long long is 8 bytes
maximum values:
int: 2147483647
short: 32767
long: 2147483647
long: 9223372036854775807
minimum int value = -2147483648
Bits per byte = 8
下面對(duì)程序做簡(jiǎn)單的解釋說(shuō)明:
1、運(yùn)算符sizeof和頭文件 limits
sizeof運(yùn)算符指出,在使用8位字節(jié)的系統(tǒng)中,int的長(zhǎng)度位4個(gè)字節(jié)??梢詫?duì)變量名或類型名使用sizeof運(yùn)算符,不過(guò)呢使用類型名的時(shí)候需要將它放在括號(hào)內(nèi),變量名則可以不需要。
最后,大家可以嘗試去寫寫下面的代碼,看看它的執(zhí)行結(jié)果會(huì)是什么?
#include <iostream>
using namespace std;
int main() {
int intVar;
double doubleVar;
char charVar;
bool boolVar;
// 使用 sizeof 操作符獲取不同數(shù)據(jù)類型的字節(jié)大小
cout << "Size of int: " << sizeof(intVar) << " bytes" << endl;
cout << "Size of double: " << sizeof(doubleVar) << " bytes" << endl;
cout << "Size of char: " << sizeof(charVar) << " bytes" << endl;
cout << "Size of bool: " << sizeof(boolVar) << " bytes" << endl;
// 也可以直接對(duì)類型使用 sizeof
cout << "Size of float: " << sizeof(float) << " bytes" << endl;
return 0;
}
總結(jié)
本次文章的主要帶著大家學(xué)習(xí)變量名的起名方式,以及所有整型類型的認(rèn)識(shí)以及它們所包含的長(zhǎng)度和字節(jié)數(shù),希望大家能夠通過(guò)這篇文章學(xué)習(xí)并掌握變量與整型相關(guān)的知識(shí)。
帶你開(kāi)始學(xué)習(xí)C++的知識(shí)。
路漫漫其修遠(yuǎn)兮,吾將上下而求索。
與君共勉之!