C++中的整型

1、整型

整型即整數,與小數對應。

許多語言隻能表示一種整型(如Python),而在C++當中根據整數的范圍提供瞭好幾種不同的整型。

C++的基本整型有charshortintlong,在C++ 11標準中,新增瞭long long。在部分編譯器當中不支持long long,而支持__int64。稍後會有單獨的文章對此進行解釋和補充說明。

其中char類型有一些特殊屬性,通常被用來當做字符而非整數。另外,每一種類型都有有符號版本和無符號版本兩種,所以總共一共有10種類型。

2、short、int、long和long long

這四種類型都是整型,唯一的不同是范圍的區別。受到底層硬件的影響,C++當中這四種類型的范圍並不是固定的。由於要兼容各種不同類型的系統與硬件,所以沒有辦法對類型進行統一。

為瞭避免引起不便,C++提供瞭一種靈活的標準,它確保瞭每一種類型的最小范圍。

  • short至少16位
  • int至少與short一樣長
  • long至少32位,且至少與int一樣長
  • long long至少64位,且至少與long一樣長

3、位與字節

計算機內存的基本單元是位,英文是bit,音譯成比特。一位bit隻有0和1兩個值,可以將其看成是開關。8位bit一共有256中不同的組合,即。因此8位bit可以表示0-255或者-128-127。

每增加一個二進制位,可以表示的范圍翻倍。因此16位可以表示65536個值,而32位可以表示4294672296個值,64位更大,大約能表示。這個范圍足夠表示銀河系中所有的星星。

8位二進制位是一個字節(byte),字節是計算機存儲的最小計量單位。1024個字節稱為1KB,而1024個KB又被稱為1MB,1024MB為1GB。

一般在操作系統當中,都有最小長度,這通常是由CPU的位數所決定的。在常用的操作系統當中如LinuxWindowsMacOS,int和long為32位,short為16位,而long long為64位。

除瞭根據通常情況來推測之外,C++當中也提供瞭一些現成的工具來查看。比如sizeof函數,sizeof函數可以查看變量占據的字節數。這個函數既可以接受變量類型也可以接受變量本身,如果傳入的是變量類型,那麼計算的結果就是該類型的變量占據的內存大小,同理如果是變量本身,則表示變量本身占據的內存。

需要註意的是,當我們查看對象是變量類型時,需要使用括號,如果是變量本身,則括號是可選的。

cout << sizeof(int) << endl;
int a = 3;
cout << sizeof a << endl;

上述兩個cout的輸出結果都是4。

除瞭sizeof函數之外,C++還提供瞭大量的常量。比如INT_MAXLONG_MAX等,顧名思義這些常量的值就是各個類型的最大值。C++ primer當中說這些常量存儲在頭文件climits當中,但我嘗試瞭一下,發現沒有引入這個頭文件也一樣能夠訪問,所以可能已經成為內置變量瞭。

有最大值,也一樣有最小值,如INT_MINLONG_MIN等。我個人感覺這塊使用頻率不高,就不過多贅述瞭,有需要去翻閱一下primer即可。

4、初始化

我們之前在介紹變量的時候隻是介紹瞭聲明變量的方式,類似於:

int a, b;


但其實我們可以把變量的聲明語句與賦值語句結合在一起,在聲明的同時進行初始化。例如:

int a = 3;
char c = 'c';


當然這個隻是最基礎的初始化方式,尤其是後續涉及到面向對象時還有更多的使用細節。

5、無符號類型

前文當中在介紹位和字節的時候曾經提到過,比如8位二進制位既可以表示0-255也可以表示-128-127。這其實就是有符號和無符號的區別。

如果我們確定我們要存儲的整數為非負數,並且想要擁有更大的范圍,就可以使用無符號修飾符unsigned來修飾這幾種類型。

比如:

unsigned short ushort;
unsigned int uint;
unsigned long ulong;
unsigned long long ull;


其中unsigned int可以簡寫成unsigned,其他的用法和有符號的整數是一樣的。

到此這篇關於C++中的整型的文章就介紹到這瞭,更多相關C++整型內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: