• Index

数据类型

Reads: 76

我们知道在使用变量前需要用数据类型声明出变量才能使用,前面已经讲解过非常常用的基本数据类型,现在将详细讲解基本数据类型和常用的其他数据类型。

数据类型

在声明定义变量时,必须指定数据类型,来说明变量保存的类型变量占用多大的内存

基本数据类型属于C++的核心语言,其他的数据类型都是根据这些衍生出来的。以下是基本数据类型

类型 类型简写 用途 占用内存(字节数) 取值范围
bool bool 只有两个值(例如性别) 1 false, true
unsigned char unsigned char 保存字节数据 1 [0, 255]
signed char char 保存窄字符或UTF-8字符 1 [-128, 127]
wchar_t wchar_t 保存宽字符字符 2(Windows)

4(Linux/OS X)
[-32768, 32767](Windows)

[-2147483648, 2147483647](Linux/OS X)
char16_t char16_t 保存UCS-2字符 2 [0, 65535]
char32_t char32_t 保存UCS-4字符 4 [0, 4294967295]
signed int int 保存整数 2(16位系统)

4(32位系统)
[-32768, 32767](16位系统)

[-2147483648, 2147483647](32位系统)
unsigned int unsigned int 保存非负整数 2(16位系统)

4(32位系统)
[0, 65535](16位系统)

[0, 4294967295](32位系统)
signed short int short 保存整数 2 [-32768, 32767]
unsigned short int unsigned short 保存非负整数 2 [0, 65535]
signed long int long 保存整数 4(GCC32位/VS)

8(GCC64位)
[-2147483648, 2147483647](GCC32位/VS)

[-9223372036854775808, 9223372036854775807](GCC64位)
unsigned long int unsigned long 保存非负整数 4(GCC32位/VS)

8(GCC64位)
[0, 4294967295](GCC32位/VS)

[0, 18446744073709551615](GCC64位)
signed long long int long long 保存整数 8 [-9223372036854775808, 9223372036854775807]
unsigned long long int unsigned long long 保存非负整数 8 [0, 18446744073709551615]
float float 保存小数 4 6位左右的有效数字
double double 保存小数 8 16位左右的有效数字
long double long double 保存小数 8(VS)

12(GCC32位)

16(GCC64位)
这个情况太多就不考证了,转载请注明出处
小古银的C++教程
指针 指针 保存内存地址 2(16位系统)

4(32位系统)

8(64位系统)
[0x0000, 0xFFFF](16位系统)

[0x00000000, 0xFFFFFFFF](32位系统)

[0x0000000000000000, 0xFFFFFFFFFFFFFFFF](64位系统)

其中,指针是用来保存地址的特殊数据类型。虽然指针不是基本数据类型,但也是很常用的类型,所以也放到这部分一起讲解。

注意:

  • 以上基本数据类型的占用大小是一般情况下,事实上,根据编译器的不同,基本数据类型的占用大小也不一定都是固定的。
  • 使用基本数据类型的时候,一般使用简写。
  • 保存整数时,由于没有比unsigned long long更大的基本数据类型,所以如果你要保存的数字大于unsigned long long可以保存的最大值,你需要另外想办法解决。

其他常用的数据类型:

  • std::stringstd::wstringstd::u16stringstd::u32string用于保存字符串,这些类型在string库中。
  • std::size_t用于保存长度,这个类型在cstddef库中。

类型后缀

0默认是int类型。但是有不少的时候,如果我们想这个0unsigned int类型。那么,这种情况就可以使用类型后缀,说明这个字面量是指定类型的。例如:unsigned int zero = 0u;unsigned long long two = 2ull;

类型后缀有以下这些:

类型 后缀
bool 无后缀
unsigned char 无后缀
char/wchar_t/char16_t/char32_t 无后缀
int 无后缀
short 无后缀
long l 或 L
unsigned int u 或 U
unsigned short 无后缀
unsigned long ul 或 UL
long long ll 或 LL
unsigned long long ull 或 ULL
float f 或 F
double 无后缀
long double l 或 L

拓展知识

固定大小的数据类型(了解即可)

如果需要固定数据占用大小,则需要使用以下数据类型,这些数据类型都在cstdint库中:

  • 固定8位长度:int8_tuint8_t
  • 固定16位长度:int16_tuint16_t
  • 固定32位长度:int32_tuint32_t
  • 固定64位长度:int64_tuint64_t

注意:只有当编译器支持这些类型的时候,这些类型才会被定义;当你使用了这些类型但是编译器不支持,编译的时候将会报错。

补充知识(了解即可)

  1. 基本数据类型中,char16_tchar32_tunsigned long longlong long是C++11增加的。
  2. 后缀ull/ULL是C++11增加的。

Comments

Make a comment

  • Index

WARNING: You are using an old browser that does not support HTML5. Please choose a modern browser (Chrome / Microsoft Edge / Firefox / Sarafi) to get a good experience.