跳转至

C++数据类型

C++ 数据类型

在声明变量时,所有变量都使用数据类型来限制存储的数据类型。因此,我们可以说数据类型用于告诉变量它们可以存储的数据类型。每当在C++中定义一个变量时,编译器会根据声明时使用的数据类型为该变量分配一定的内存。每种数据类型所需的内存量是不同的。

C++支持多种数据类型,程序员可以根据应用程序的需求选择合适的数据类型。数据类型指定了要存储的值的大小和类型。然而,尽管C++指令在所有机器上都是相同的,存储表示和操作每种数据类型的机器指令也会因机器而异。

C++支持以下数据类型:

  1. 基本数据类型或内置数据类型或基本数据类型
  2. 派生数据类型
  3. 用户定义数据类型

DatatypesInC

C++中的数据类型主要分为三种:

1.基本数据类型:这些数据类型是内置或预定义的数据类型,用户可以直接使用它们来声明变量。例如:int、char、float、bool等。C++中可用的基本数据类型包括:

  • 整数
  • 字符
  • 布尔
  • 浮点数
  • 双精度浮点数
  • 无值或空
  • 宽字符

2.派生数据类型:派生数据类型是从基本数据类型或内置数据类型派生出来的,被称为派生数据类型,可以分为以下四种:

  • 函数
  • 数组
  • 指针
  • 引用

3.抽象或用户定义数据类型:抽象或用户定义数据类型由用户自己定义。例如,在C++中定义一个类或结构。C++提供了以下用户定义数据类型:

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

基本数据类型

  • 整数(Integer):用于整数数据类型的关键字是int。整数通常需要4字节的内存空间,范围从-2147483648到2147483647。
  • 字符(Character):字符数据类型用于存储字符。用于字符数据类型的关键字是char。字符通常需要1字节的内存空间,范围从-128到127或0到255。
  • 布尔(Boolean):布尔数据类型用于存储布尔值或逻辑值。布尔变量可以存储 true(真)或 false(假)。布尔数据类型的关键字是 bool
  • 浮点数(Floating Point):浮点数数据类型用于存储单精度浮点值或十进制值。用于浮点数数据类型的关键字是float。浮点变量通常需要4字节的内存空间。
  • 双精度浮点数(Double Floating Point):双精度浮点数数据类型用于存储双精度浮点值或十进制值。用于双精度浮点数数据类型的关键字是double。双精度变量通常需要8字节的内存空间。
  • 空(void):空意味着没有任何值。void数据类型表示一个无值的实体。void数据类型用于那些不返回值的函数。
  • 宽字符(Wide Character)宽字符数据类型也是一种字符数据类型,但这个数据类型的大小超过了普通的 8 位数据类型。用 wchar_t 表示。它通常是 2 或 4 字节长。
  • sizeof() 运算符(sizeof() operator)sizeof() 运算符用于找出变量/数据类型在计算机内存中占用的字节数。

样例

C++
int m , x[50];     

cout<<sizeof(m); //返回 4,这是整数变量 "m" 占用的字节数。

cout<<sizeof(x); //返回 200,这是整数数组变量 "x" 占用的字节数。 

变量的大小可能因编译器和您使用的计算机而异,可能与上述显示的数值不同。

C++
// C++ 程序,演示您计算机上各种数据类型的正确大小。
#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;
}

输出

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

时间复杂度:O(1)

空间复杂度:O(1)

数据类型修饰符

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

ModifiersInC

C++中可用的数据类型修饰符包括:

  • 有符号(Signed)
  • 无符号(Unsigned)
  • 短(Short)
  • 长(Long)

下表总结了当与类型修饰符结合使用时,内置数据类型修改后的大小和范围:

Data Type

大小 (以字节为单位)

范围

short int

2

-32,768 到 32,767

unsigned short int

2

0 到 65,535

unsigned int

4

0 到 4,294,967,295

int

4

-2,147,483,648 到 2,147,483,647

long int

4

-2,147,483,648 到 2,147,483,647

unsigned long int

4

0 到 4,294,967,295

long long int

8

-(2^63) 到 (2^63)-1

unsigned long long int

8

0 到 18,446,744,073,709,551,615

signed char

1

-128 到 127

unsigned char

1

0 到 255

float

4

-3.4×10^38 到 3.4×10^38

double

8

-1.7×10^308 到1.7×10^308

long double

12

-1.1×10^4932 到1.1×10^4932

wchar_t

2 或者 4

1个宽字符

[!CAUTION]

以上数值可能因编译器而异。在上面的例子中,我们使用的是 GCC 32 位编译器。 我们可以通过使用 sizeof() 运算符并将数据类型的关键字作为参数传递给这个函数,如下所示来显示所有数据类型的大小:

现在,为了获取数据类型的范围,请参考以下图表。

[!CAUTION]

头文件定义了查找基本数据类型范围的宏常量。无符号修饰符的最小值为零。因此,没有为无符号最小值定义宏常量。

宏常量

名称

表达

CHAR_MIN

类型为char的对象的最小值

CHAR_MAX

类型为char的对象的最大值

SCHAR_MIN

类型为Signed char的对象的最小值

SCHAR_MAX

类型为Signed char的对象的最大值

UCHAR_MAX

类型为Unsigned char的对象的最大值

CHAR_BIT

一个 char 对象中的位数。

MB_LEN_MAX

多字节字符中的最大字节数。

SHRT_MIN

类型为short int的对象的最小值

SHRT_MAX

类型为short int的对象的最大值

USHRT_MAX

类型为Unsigned short int的对象的最大值

INT_MIN

类型为int的对象的最小值

INT_MAX

类型为int的对象的最大值

UINT_MAX

类型为Unsigned int的对象的最大值

LONG_MIN

类型为long int的对象的最小值

LONG_MAX

类型为long int的对象的最大值

ULONG_MAX

类型为Unsigned long int的对象的最大值

LLONG_MIN 

类型为long long int的对象的最小值

LLONG_MAX

类型为long long int的对象的最大值

ULLONG_MAX

类型为Unsigned long long int的对象的最大值

实际值取决于特定的系统和库实现,但应反映目标平台上这些类型的限制。LLONG_MIN、LLONG_MAX和ULLONG_MAX是为符合1999年或更高版本C标准的库定义的(这仅包括自2011年以来的C++标准:C++11)。

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

样例

C++
// C++程序演示数据类型的大小
#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;
}

输出

Text Only
Size of char : 1 byte
char minimum value: -128
char maximum value: 127
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

时间复杂度:O(1)

空间复杂度:O(1)

C++
#include <iostream>
#include <string>
using namespace std;

int main() {
  // 整数数据类型
  int a = 10;
  short b = 20;
  long c = 30;
  long long d = 40;
  cout << "Integer data types: " << endl;
  cout << "int: " << a << endl;
  cout << "short: " << b << endl;
  cout << "long: " << c << endl;
  cout << "long long: " << d << endl;

  // 浮点数据类型
  float e = 3.14f;
  double f = 3.141592;
  long double g = 3.14159265358979L;
  cout << "Floating-point data types: " << endl;
  cout << "float: " << e << endl;
  cout << "double: " << f << endl;
  cout << "long double: " << g << endl;

  // 字符数据类型
  char h = 'a';
  wchar_t i = L'b';
  char16_t j = u'c';
  char32_t k = U'd';
  cout << "Character data types: " << endl;
  cout << "char: " << h << endl;
  wcout << "wchar_t: " << i << endl;
  cout << "char16_t: " << j << endl;
  cout << "char32_t: " << k << endl;

  // 布尔数据类型
  bool l = true;
  bool m = false;
  cout << "Boolean data type: " << endl;
  cout << "true: " << l << endl;
  cout << "false: " << m << endl;

  // 字符串数据类型
  string n = "Hello, world!";
  cout << "String data type: " << endl;
  cout << n << endl;

  return 0;
}

输出

Text Only
Integer data types: 
int: 10
short: 20
long: 30
long long: 40
Floating-point data types: 
float: 3.14
double: 3.14159
long double: 3.14159
Character data types: 
char: a
wchar_t: b
char16_t: 99
char32_t: 100
Boolean data type: 
true: 1
false: 0
String data type: 
Hello, world!

这个程序声明了各种数据类型的变量,为它们赋值,然后打印出它们的值。

整数数据类型包括int、short、long和long long。这些数据类型表示不同大小的整数。

浮点数据类型包括float、double和long double。这些数据类型表示具有不同精度级别的实数。

字符数据类型包括char、wchar_t、char16_t和char32_t。这些数据类型表示不同大小的单个字符。

布尔数据类型是一个简单的数据类型,只能有两个值之一:true或false。

字符串数据类型是字符序列。在这个程序中,我们使用string类声明一个字符串变量并为其赋值。

优点

数据类型为程序中的数据提供了一种分类和组织的方式,使其更容易理解和维护。 每种数据类型都有一个特定的值范围,可以容纳,从而实现对存储数据的更精确控制。 数据类型通过强制执行关于如何使用和操作数据的严格规则,帮助防止程序中的错误和漏洞。 C++提供了广泛的数据类型,允许开发人员为特定任务选择最佳类型。

缺点

使用错误的数据类型可能会导致程序出现意外的行为和错误。 一些数据类型,如长双精度浮点数(long double)或字符数组(char),如果过度使用,可能会占用大量内存并影响性能。 C++ 的复杂类型系统可能会使初学者难以有效地学习和使用该语言。 数据类型的使用可能会增加程序的复杂性和冗长,使其更难以阅读和理解。

评论