C++基础(4)C++ 数据类型

333 阅读5分钟

我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第4篇文章,点击查看活动详情

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

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

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

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

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

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

  • Integer
  • Character
  • Boolean
  • Floating Point
  • Double Floating Point
  • Valueless or Void
  • Wide Character

2. 派生数据类型: 从原始或内置数据类型派生的数据类型称为派生数据类型。这些可以有四种类型,即: 

  • Function
  • Array
  • Pointer
  • Reference

3. 抽象或用户定义的数据类型:这些数据类型由用户自己定义。就像在 C++ 中定义一个类或一个结构一样。C++ 提供以下用户定义的数据类型: 

  • Class
  • Structure
  • Union
  • Enumeration
  • Typedef defined Datatype

本文讨论C++ 中可用的 原始数据类型。

  • Integer:用于整数数据类型的关键字是int。整数通常需要 4 个字节的内存空间,范围从 -2147483648 到 2147483647。  
  • Character:字符数据类型用于存储字符。用于字符数据类型的关键字是char。字符通常需要 1 个字节的内存空间,范围从 -128 到 127 或 0 到 255。  
  • Boolean:布尔数据类型用于存储布尔或逻辑值。布尔变量可以存储truefalse。用于布尔数据类型的关键字是bool。 
  • 浮点:浮点数据类型用于存储单精度浮点值或十进制值。用于浮点数据类型的关键字是float。浮点变量通常需要 4 个字节的内存空间。 
  • 双浮点:双浮点数据类型用于存储双精度浮点值或十进制值。用于双浮点数据类型的关键字是double。双变量通常需要 8 个字节的内存空间。 
  • void : void 表示没有任何价值。void 数据类型表示无价值的实体。void 数据类型用于那些不返回值的函数。 
  • 宽字符:宽字符数据类型也是字符数据类型,但该数据类型的大小大于普通的 8 位数据类型。由wchar_t表示。它通常为 2 或 4 个字节长。

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

sizeof 运算符 — sizeof 运算符用于查找计算机内存中变量/数据类型占用的字节数。例如: int m , x[50]; cout<<sizeof(m); //返回4,这是整数变量“m”占用的字节数。cout<<sizeof(x); //返回 200,即整数数组变量“x”占用的字节数。

// 以下是示例,它将在您的计算机上生成正确大小的各种数据类型。
#include <iostream>
using namespace std;

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

输出

char 大小:1
int 大小:4
long 大小:8
float 大小:4
float 大小:8

时间复杂度:O(1)

空间复杂度:O(1)

数据类型修饰符

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

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

  • 未签名
  • 短的

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

数据类型大小(以字节为单位)范围
short int2-32,768 to 32,767
unsigned short int20 to 65,535
unsigned int40 to 4,294,967,295
int4-2,147,483,648 to 2,147,483,647
long int4-2,147,483,648 to 2,147,483,647
unsigned long int40 to 4,294,967,295
long long int8-(2^63) to (2^63)-1
unsigned long long int80 to 18,446,744,073,709,551,615
signed char1-128 to 127
unsigned char10 to 255
float4 
double8 
long double12 
wchar_t2 or 41 wide character

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

现在要获取数据类型的范围参考下图

注意:  syntax<limits.h> 头文件被定义为查找基本数据类型的范围。无符号修饰符的最小值为零。因此,没有为无符号最小值定义宏常量。

宏常量

名称 表示
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 ++程序到数据类型的大小
#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

时间复杂度:O(1)

空间复杂度:O(1)