C++ 数据类型


在用任何语言编写程序时,都需要使用各种变量来存储各种信息。变量只不过是用于存储值的保留内存位置。这意味着当您创建变量时,您会在内存中保留一些空间。

您可能喜欢存储各种数据类型的信息,如字符、宽字符、整数、浮点、双浮点、布尔值等。操作系统根据变量的数据类型分配内存并决定可以存储的内容保留内存。

原始内置类型

C++ 为程序员提供了丰富的内置数据类型和用户定义的数据类型。下表列出了七种基本的 C++ 数据类型 -

类型 关键词
布尔值 布尔值
特点 字符
整数 整数
浮点 漂浮
双浮点数 双倍的
无价值 空白
宽字符 wchar_t

可以使用这些类型修饰符中的一个或多个来修改几种基本类型 -

  • 未签名
  • 短的
  • 长的

下表显示了变量类型、在内存中存储该值需要多少内存以及该类型变量可以存储的最大值和最小值是多少。

类型 典型位宽 典型范围
字符 1字节 -127 至 127 或 0 至 255
无符号字符 1字节 0 至 255
签名字符 1字节 -127 至 127
整数 4字节 -2147483648 至 2147483647
无符号整数 4字节 0 至 4294967295
有符号整数 4字节 -2147483648 至 2147483647
短整型 2字节 -32768至32767
无符号短整型 2字节 0 至 65,535
有符号短整型 2字节 -32768至32767
长整型 8字节 -9223372036854775808 至 9223372036854775807
有符号长整型 8字节 与长整型相同
无符号长整型 8字节 0 至 18446744073709551615
长整型 8字节 -(2^63) 至 (2^63)-1
无符号长长整型 8字节 0 至 18,446,744,073,709,551,615
漂浮 4字节
双倍的 8字节
长双 12字节
wchar_t 2 或 4 字节 1 个宽字符

变量的大小可能与上表中显示的不同,具体取决于您使用的编译器和计算机。

以下是示例,它将在您的计算机上生成各种数据类型的正确大小。

#include <iostream>
using namespace std;

int main() {
   cout << "Size of char : " << sizeof(char) << endl;
   cout << "Size of int : " << sizeof(int) << endl;
   cout << "Size of short int : " << sizeof(short int) << endl;
   cout << "Size of long int : " << sizeof(long int) << endl;
   cout << "Size of float : " << sizeof(float) << endl;
   cout << "Size of double : " << sizeof(double) << endl;
   cout << "Size of wchar_t : " << sizeof(wchar_t) << endl;
   
   return 0;
}

此示例使用 endl,它在每行后面插入一个换行符,并使用 << 运算符将多个值传递到屏幕。我们还使用sizeof()运算符来获取各种数据类型的大小。

当上面的代码被编译和执行时,它会产生以下结果,该结果可能因机器而异 -

Size of char : 1
Size of int : 4
Size of short int : 2
Size of long int : 4
Size of float : 4
Size of double : 8
Size of wchar_t : 4

下面是另一个例子:

#include <iostream>
#include <limits>
using namespace std;

int main() {

    std::cout << "Int Min " << std::numeric_limits<int>::min() << endl;
    std::cout << "Int Max " << std::numeric_limits<int>::max() << endl;
    std::cout << "Unsigned Int  Min " << std::numeric_limits<unsigned int>::min() << endl;
    std::cout << "Unsigned Int Max " << std::numeric_limits<unsigned int>::max() << endl;
    std::cout << "Long Int Min " << std::numeric_limits<long int>::min() << endl;
    std::cout << "Long Int Max " << std::numeric_limits<long int>::max() << endl;

    std::cout << "Unsigned Long Int Min " << std::numeric_limits<unsigned  long int>::min() <<endl;
    std::cout << "Unsigned Long Int Max " << std::numeric_limits<unsigned  long int>::max() << endl;

}

typedef 声明

您可以使用typedef为现有类型创建新名称。以下是使用 typedef 定义新类型的简单语法 -

typedef type newname; 

例如,以下内容告诉编译器 foot 是 int 的另一个名称 -

typedef int feet;

现在,以下声明是完全合法的,并创建一个名为距离的整数变量 -

feet distance;

枚举类型

枚举类型声明一个可选的类型名称和一组零个或多个可用作该类型值的标识符。每个枚举数都是一个常量,其类型是枚举。

创建枚举需要使用关键字enum。枚举类型的一般形式是 -

enum enum-name { list of names } var-list; 

这里,enum-name 是枚举的类型名称。名称列表以逗号分隔。

例如,以下代码定义了称为颜色的颜色枚举和颜色类型的变量 c。最后,c 被赋予值“blue”。

enum color { red, green, blue } c;
c = blue;

默认情况下,第一个名称的值为 0,第二个名称的值为 1,第三个名称的值为 2,依此类推。但是您可以通过添加初始值设定项来给出名称和特定值。例如,在以下枚举中,绿色的值为 5。

enum color { red, green = 5, blue };

此处,蓝色的值为 6,因为每个名称都会比其前面的名称大 1。