Tutorial Study Image

C++ 数据类型和修饰符


2022年8月4日, Learn eTutorial
2225

通过示例程序,您将了解 C++ 中使用的基本数据类型,例如字符、整数和十进制。您还将了解用于更改数据类型的 C++ 修饰符。

我们如何在 C++ 中定义数据类型?

数据类型决定了变量可以保存的数据类型,例如,整数变量可以保存整数数据,字符类型变量可以保存字符数据,等等。
所有变量在声明期间都使用数据类型来限制可以存储的数据类型。因此,我们可以得出结论,数据类型用于告知变量它们可以保存的数据种类。每次在 C++ 中声明变量时,编译器都会根据给定的数据类型为该变量分配一些内存空间。不同类型的数据需要不同数量的内存。

C++ 提供了广泛的数据类型,程序员可以选择最适合应用程序需求的数据类型。数据类型指定了必须保存的值的大小和类型。尽管 C++ 指令在所有平台上都相同,但用于修改每种数据类型的存储表示和机器指令因机器而异。

C++ 支持的数据类型如下:

  1. 主或内置或基本数据类型
  2. 派生数据类型
  3. 用户定义的数据类型
     
Datatypes in C++

C++ 中的数据类型

C++ 数据类型大致分为三类

  1. 主或内置或基本数据类型

    这些数据类型是内置或预定义的数据类型,用户可以直接使用它们来声明变量。示例包括 int、char、float、bool 等。

    C++ 提供的基本数据类型包括:

    • 整型
    • 字符
    • 布尔型
    • 浮点数
    • 双精度浮点数
    • 无值或空
    • 宽字符
  2. 派生数据类型

    派生数据类型是从基本或内置数据类型派生的数据类型。它们分为四种类型:

    • 函数
    • 数组
    • 指针
    • 引用
  3. 用户定义的数据类型

    这些数据类型由用户定义。例如,在 C++ 中,您可以定义一个类或一个结构。C++ 中提供以下用户定义数据类型:

    • 结构体
    • 联合体
    • 枚举
    • Typedef 定义的数据类型

本教程讨论了 C++ 提供的基本数据类型。

  1. 整型

    • 整数数据类型的关键字是 int
    • 整数通常占用 4 字节内存空间,范围从 -21474836482147483647
    
    int salary = 65000;
     
    
  2. 字符

    • 字符数据类型主要用于存储字符。
    • 字符数据类型由关键字 char 表示。
    • 字符通常占用 1 字节内存空间,范围从 -128127(或 0255)。
    
    char alphabet = 'a';
     
    
  3. 布尔型

    • 逻辑或布尔值使用 布尔 数据类型存储。
    • 布尔变量有两个可能的值:truefalse
    • 关键字 bool 用于描述布尔数据类型。
    
    double test = false;
     
    
  4. 浮点数

    • 单精度 浮点值或十进制值使用浮点数据类型存储。
    • 浮点数据类型的关键字是 float。浮点变量通常占用 4 字节内存空间。
    
    char average= 56.32;
     
    
  5. 双精度浮点数

    • 双精度 浮点值或十进制值使用双精度浮点数据类型存储。
    • double 是双精度浮点数据类型的关键字。
    • 双精度变量通常占用 8 字节内存空间。
    
    double volume = 165.61524;
     
    
    • void 关键字表示“没有任何值”。
    • void 数据类型表示一个无值实体。
    • 数据类型 void 用于不返回任何值的函数。

    注意:我们不能为 void 类型声明变量。我们可以声明不返回任何值的 void 类型函数。

  6. 宽字符

    • 宽字符数据类型是比 8 位字符数据类型更大的字符数据类型。
    • Wchar_t 表示此类型。通常,它长 2 或 4 字节。
    
    wchar_t test = L'?'  // storing Hebrew character;
     
    

以下示例将输出您计算机上各种数据类型的正确大小。


#include <iostream>
using namespace std;

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

输出


Size of char : 1
Size of int : 4
Size of long : 8
Size of float : 4
Size of double : 8

数据类型修饰符

Datatypes in C++

顾名思义,数据类型修饰符与内置数据类型一起使用,以修改或更改特定数据类型可以容纳或存储的数据长度。

C++ 中提供以下数据类型修饰符:

  • 有符号
  • 无符号

下表突出显示了与类型修饰符结合使用时内置数据类型的更改大小和范围

上述值可能因编译器而异。

可以使用 sizeof() 函数显示所有数据类型的大小,并将数据类型的关键字作为参数传递给此函数,如下所示:

基本数据类型的范围在头文件 <limits.h> 中定义。无符号修饰符的最小值为零。因此,没有为无符号最小值提供宏常量。

数据类型 大小(以字节为单位) 范围 (Range)
短整型 2 -32,768 到 32,767
无符号短整型 2 0 到 65,535
无符号整型 4 0 到 4,294,967,295
int 4 -2,147,483,648 到 2,147,483,647
长整型 4 -2,147,483,648 到 2,147,483,647
无符号长整型 4 0 到 4,294,967,295
长长整型 8 -(2^63) 到 (2^63)-1
无符号长长整型 8 0 到 18,446,744,073,709,551,615
有符号字符 1 -128 到 127
无符号字符 1 0 到 255
float 4  
double 8  
长双精度 12  
wchar_t 2 或 4 1 个宽字符

让我们看一些例子。


long a = 3623232;
long int b = 1645342;
long double c = 213434.56343;
short d = 3434233; // Error! out of range
unsigned int e = -5;    // Error! can only store positive numbers or 0
 

宏常量

宏常量用于查找字符、短整型、整型、长整型、长长整型等整数类型的大小。这些宏定义允许您声明将在整个代码中使用的常量值。宏定义不是变量,不能像变量一样被程序代码更改。

宏常量 描述
CHAR_BIT 它返回 char 对象中的位数。 8
SCHAR_MIN 它返回有符号 char 对象的最小值。 -128
SCHAR_MAX 它返回有符号 char 对象的最大值。 127
UCHAR_MAX 它返回无符号 char 对象的最大值。 255
CHAR_MIN 它返回 char 对象的最小值。 0 或 SCHAR_MIN
CHAR_MAX 它返回 char 对象的最大值。 SCHAR_MAX 或 UCHAR_MAX
MB_LEN_MAX 它返回多字节字符在任何区域设置中的最大字节数。 1 或更大
SHRT_MIN 它返回有符号 short int 对象的最小值。 -32768
SHRT_MAX 它返回有符号 short int 对象的最大值。 32767
USHRT_MAX 它返回无符号 short int 对象的最大值。 65535
INT_MIN 它返回有符号 int 对象的最小值。 -32768 或 -2147483648
INT_MAX 它返回有符号 int 对象的最大值。 32767 或 2147483647
UINT_MAX 它返回无符号 int 对象的最大值。 65535 或 4294967295
LONG_MIN 它返回有符号 long int 对象的最小值。 -2147483648 或 -9223372036854775808
LONG_MAX 它返回有符号 long int 对象的最大值。 2147483647 或 9223372036854775807
ULONG_MAX 它返回无符号 long int 对象的最大值。 4294967295 或 18446744073709551615
LLONG_MIN 它返回有符号 long long int 对象的最小值。 -9223372036854775808
LLONG_MAX 它返回有符号 long long int 对象的最大值。 9223372036854775807
ULLONG_MAX 它返回无符号 long long int 对象的最大值。 18446744073709551615

实际值由具体的系统和库实现决定,但它必须表示这些类型在目标平台中的限制。LLONG MIN、LLONG MAX 和 ULLONG MAX 是为遵循 1999 年或更高版本 C 标准(其中包括 2011 年之后的 C++ 标准:C++11)的库定义的。

使用宏常量确定数据类型范围的 C++ 程序


// C++ program to sizes of data types
#include <iostream>

#include <limits.h>

using namespace std;

int main() {
    cout << "Size of char : " << sizeof(char) << " byte" << endl;

    cout << "char minimum value: " << CHAR_MIN << endl;

    cout << "char maximum value: " << CHAR_MAX << endl;

    cout << "Size of int : " << sizeof(int) << " bytes" <<endl;

    cout << "Size of short int : " << sizeof(short int) <<" bytes" << endl;

    cout << "Size of long int : " << sizeof(long int) <<" bytes" << endl;

    cout << "Size of signed long int : "<< sizeof(signed long int) << " bytes" << endl;

    cout << "Size of unsigned long int : " << sizeof(unsigned long int) << " bytes" << endl;

    cout << "Size of float : " << sizeof(float) << " bytes" << endl;

    cout << "Size of double : " << sizeof(double) << " bytes" << endl;

    cout << "Size of wchar_t : " << sizeof(wchar_t) << " bytes" << endl;

    return 0;
}
 

输出


Size of char : 1 byte
Size of int : 4 bytes
Size of short int : 2 bytes
Size of long int : 8 bytes
Size of signed long int : 8 bytes
Size of unsigned long int : 8 bytes
Size of float : 4 bytes
Size of double : 8 bytes
Size of wchar_t : 4 bytes

派生数据类型

派生数据类型是从主数据类型派生的数据类型。例如数组、指针、函数类型、结构等。

我们将在下一教程中学习这些派生数据类型。