编程语言中变量保存的是它所存储值的内存位置。也就是说在创建一个变量时,就会在内存中开辟一些空间。操作系统会根据变量的数据类型,来分配内存和决定在保留内存中存储什么。
1. 基本数据类型
类型 | 关键字 |
---|---|
布尔型 | bool |
字符型 | char |
整型 | int |
浮点型 | float |
双浮点型 | double |
无类型 | void |
宽字符型 | wchar_t |
其实 wchar_t
定义如下:
typedef short int wchar_t;
也就是说 wchar_t
实际上的空间是和 short int
一样。
一些基本类型可以使用一个或多个类型修饰符进行修饰:
signed
unsigned
short
long
C++11
引入了固定宽度的整型,让您能够以位为单位指定整数的宽度。这些类型为 int8_t
和 unit8_t
,分别用于存储 8 位的有符号和无符号整数。您还可能使用 16 位、32 位和 64位的整型,它们为 int16_t
、 uint16_t
、 int32_t
、 uint32_t
、 int64_t
和 uint64_t
。要使用这些类型,必须包含头文件 <cstdint>
。
2. 类型占用内存
变量长度指的是程序员声明变量时,编译器将预留多少内存,用于存储赋给该变量的数据。变量的长度随类型而异, C++
提供了一个方便的运算符 — sizeof
,可用于确定变量的长度(单位为字节)或类型。
下表显示了各种变量类型在内存中存储值时需要占用的内存,以及该类型的变量所能存储的最大值和最小值。
类型 | 位 | 范围 |
---|---|---|
char | 1 个字节 | -128 到 127 或者 0 到 255 |
unsigned char | 1 个字节 | 0 到 255 |
signed char | 1 个字节 | -128 到 127 |
int | 4 个字节 | -2147483648 到 2147483647 |
unsigned int | 4 个字节 | 0 到 4294967295 |
signed int | 4 个字节 | -2147483648 到 2147483647 |
short int | 2 个字节 | -32768 到 32767 |
unsigned short int | 2 个字节 | 0 到 65,535 |
signed short int | 2 个字节 | -32768 到 32767 |
long int | 8 个字节 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
signed long int | 8 个字节 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
unsigned long int | 8 个字节 | 0 到 18,446,744,073,709,551,615 |
float | 4 个字节 | 精度型占4个字节(32位)内存空间,+/- 3.4e +/- 38 (~7 个数字) |
double | 8 个字节 | 双精度型占8 个字节(64位)内存空间,+/- 1.7e +/- 308 (~15 个数字) |
long double | 16 个字节 | 长双精度型 16 个字节(128位)内存空间,可提供18-19位有效数字。 |
wchar_t | 2 或 4 字节 | 1 个宽字符 |
bool | 1 字节 | true/false |
注意:不同系统会有所差异,一字节为 8 位。变量的大小会根据编译器和所使用的电脑而有所不同。
示例代码如下:
#include <iostream>
using namespace std;
int main()
{
cout << "type:\t\t" << "******************size******************" <<endl;
cout << "bool 所占字节数是:"<< sizeof(bool) << endl;
cout << "char 所占字节数是:"<< sizeof(char) << endl;
cout << "unsigned char 所占字节数是:"<< sizeof(unsigned char) << endl;
cout << "signed char 所占字节数是:"<< sizeof(signed char) << endl;
cout << "==========================================================="<<endl;
cout << "int 所占字节数是:"<< sizeof(int) << endl;
cout << "unsigned int 所占字节数是:"<< sizeof(unsigned int) << endl;
cout << "signed int 所占字节数是:"<< sizeof(signed int) << endl;
cout << "==========================================================="<<endl;
cout << "short int 所占字节数是:"<< sizeof(short int) << endl;
cout << "unsigned short int 所占字节数是:"<< sizeof(unsigned short int) << endl;
cout << "signed short int 所占字节数是:"<< sizeof(signed short int) << endl;
cout << "==========================================================="<<endl;
cout << "long int 所占字节数是:"<< sizeof(long int) << endl;
cout << "unsigned long int 所占字节数是:"<< sizeof(unsigned long int) << endl;
cout << "signed long int 所占字节数是:"<< sizeof(signed long int) << endl;
cout << "==========================================================="<<endl;
cout << "float 所占字节数是:"<< sizeof(float) << endl;
cout << "==========================================================="<<endl;
cout << "double 所占字节数是:"<< sizeof(double) << endl;
cout << "long double 所占字节数是:"<< sizeof(long double) << endl;
cout << "==========================================================="<<endl;
cout << "wchar_t 所占字节数是:"<< sizeof(wchar_t) << endl;
cout << "type:\t\t" << "******************size******************" <<endl;
return 0;
}
输出结果如下:
wohu@wohu:~/C++$ ./a.out
type: ******************size******************
bool 所占字节数是:1
char 所占字节数是:1
unsigned char 所占字节数是:1
signed char 所占字节数是:1
===========================================================
int 所占字节数是:4
unsigned int 所占字节数是:4
signed int 所占字节数是:4
===========================================================
short int 所占字节数是:2
unsigned short int 所占字节数是:2
signed short int 所占字节数是:2
===========================================================
long int 所占字节数是:8
unsigned long int 所占字节数是:8
signed long int 所占字节数是:8
===========================================================
float 所占字节数是:4
===========================================================
double 所占字节数是:8
long double 所占字节数是:16
===========================================================
wchar_t 所占字节数是:4
type: ******************size******************
wohu@wohu:~/C++$
3. typedef 声明
使用 typedef
为一个已有的类型取一个新的名字。下面是使用 typedef
定义一个新类型的语法:
typedef type newname;
使用方法:
typedef int INT;
INT a = 5; // 声明定义一个变量
关于 typedef 的几点说明:
typedef
可以声明各种类型名,但不能用来定义变量。用typedef
可以声明数组类型、字符串类型,结构体类型。- 用
typedef
只是对已经存在的类型增加一个类型名,而没有创造新的类型。 - 当在不同源文件中用到同一类型数据(尤其是像数组、指针、结构体、共用体等类型数据)时,常用
typedef
声明一些数据类型,把它们单独放在一个头文件中,然后在需要用到它们的文件中用#include
命令把它们包含进来,以提高编程效率。 - 使用
typedef
有利于程序的通用与移植。有时程序会依赖于硬件特性,用typedef
便于移植。