【C++】C++中的基本內置類型

基本數據類型

下面這張表是C++支持的基本數據類型ios

類型 含義 最小尺寸
bool 布爾 未定義
char 字符 8位
wchar_t 寬字符 16位
char16_t Unicode字符 16位
char32_t Unicode字符 32位
short 短整型 16位
int 整型 16位
long 長整型 32位
long long 長整型 64位
float 單精度浮點數 6位有效數
double 雙精度浮點數 10位有效數字
long double 擴展精度浮點數 10位有效數字


C++語言規定,一個int至少和一個short同樣大,一個long至少和一個int同樣大,一個long long至少和一個long同樣大。其中,long long是C++11新定義的類型。spa

一般short類型佔16位(16比特),那麼它的範圍就是(-32768~32767)。指針

一般int類型佔32位(1個字,32比特),那麼它的範圍就是(-2^31~2^31-1)。code

一般long類型佔64位(64比特),那麼它的範圍就是(-2^63 ~ 2^63-1)。blog

一般float類型佔32位(1個字,32比特),它的精度爲7位。字符串

一般double類型佔64位(2個字,64比特),它的精度爲15位。編譯器

#include <iostream>
#include <limits>

using namespace std;

int main(){
    cout << "type:char\n";
    cout << "bytes = " << sizeof(char) << "\n\n";

    cout << "type:short\n";
    cout << "bytes = " << sizeof(short) << "\n";
    cout << "smallest value = " << numeric_limits<short>::min() << "\n";
    cout << "largest value = " << numeric_limits<short>::max() << "\n\n";

    cout << "type:int\n";
    cout << "bytes = " << sizeof(int) << "\n";
    cout << "smallest value = " << numeric_limits<int>::min() << "\n";
    cout << "largest value = " << numeric_limits<int>::max() << "\n\n";    

    cout << "type:long";
    cout << "bytes = " << sizeof(long) << "\n";
    cout << "smallest value = " << numeric_limits<long>::min() << "\n";
    cout << "largest value = " << numeric_limits<long>::max() << endl;
    return 0;
}

輸出結果爲:it

type:char
bytes = 1

type:short
bytes = 2
smallest value = -32768
largest value = 32767

type:int
bytes = 4
smallest value = -2147483648
largest value = 2147483647

type:longbytes = 8
smallest value = -9223372036854775808
largest value = 9223372036854775807

除了上面的這些基本數據類型,其中整型能夠劃分爲帶符號的(signed)和無符號的(unsigned)兩種。帶符號的能夠表示整數、負數和0,無符號的只能表示非負數。io

short、int、long、long long表示有符號的,在它們的前面加上unsigned表示無符號的:unsigned short、unsigned int、unsigned long、unsigned long long。編譯


無符號(unsigned)因爲沒有負數,因此取值範圍和帶符號(signed)的也不一樣:

unsigned short :0~2^16 - 1

unsigned int :0~2^32 - 1

unsigned long :0~2^64 -1

 

注意:浮點數(float和double)沒有無符號的。

2.unsigned類型轉化

在上面知道了signed和unsigned的取值範圍不一樣,而且unsigned不能爲負數。

那麼若是故意給unsigned一個負數,會發生什麼呢,編譯器會報錯嗎?答案是不會,編譯器會認爲你所作的含有特殊的含義,編譯器不會干涉你。

 

那麼負的unsigned轉化爲正的unsigned的規則是什麼呢?

規則:結果值等於這個負數加上數據類型unsigned的模。

#include <iostream>
using namespace std;
int main(){
    unsigned int n = -10;
    cout << "n = " << n << endl;
    return 0;
}

輸出的結果值:

n = 4294967286

因爲unsigned int的模爲2^32(4294967296),2^32+(-10)就是4294967286。

 

unsigned short 的模爲2^16。
unsigned int 的模爲2^32。
unsigned long 的模爲2^64。

 

這樣以來的話,那麼一個正的unsigned能夠和一個負的unsigned(轉化後爲正的)相等。

unsigned int m = 4294967295;

unsigned int n = -1;

那麼 m == n 結果爲true。-1轉化後剛好是4294967295。

3.字面值

整型和浮點數字面值

以0開頭的整數表示八進制,以0x或0X開頭的整數表示十六進制。

浮點型字面值默認是一個double類型。

轉義序列

換行 \n 橫向製表符 \t
縱向製表符 \v 退格符 \b
反斜線 \\ 問號 \?
回車符 \r 進紙符 \f
警報 \a 單引號 \'
雙引號 \"    


指定字面值的類型

字符和字符串

前綴 含義 類型
u Unicode16字符 char16_t
U Unicode32字符 char32_t
L 寬字符 wchar_t
u8 UTF-8 char


整型字面值

後綴 類型
u or U unsigned
l or L long
ll or LL long long

 

浮點型字面值

後綴 類型
f or F float
l 或 L long double

 

指針字面值

nullptr是指針字面值

 

例如:

L'a' //wchar_t類型
42ULL //unsigned long long 類型
1E-3F //float類型
3.14L //long double類型
相關文章
相關標籤/搜索