您的位置:首页 > 娱乐 > 八卦 > 重庆平台网站建设费用_宁波房产网上备案查询官网_软件排名工具_一键优化大师

重庆平台网站建设费用_宁波房产网上备案查询官网_软件排名工具_一键优化大师

2024/12/22 13:02:56 来源:https://blog.csdn.net/2201_75539691/article/details/144131106  浏览:    关键词:重庆平台网站建设费用_宁波房产网上备案查询官网_软件排名工具_一键优化大师
重庆平台网站建设费用_宁波房产网上备案查询官网_软件排名工具_一键优化大师

在这里插入图片描述

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳]
本文专栏: C++

文章目录

  • 💯前言
  • 💯C++ 中的数据类型的存储长度
    • 1.1 数据类型的存储单位
      • 字节与其他存储单位的换算关系
    • 1.2 数据类型及其长度
    • 1.3 平台对数据类型长度的影响
  • 💯数据类型的取值范围
    • 2.1 数据类型取值范围表格
    • 2.2 `<climits>` 和 `<cfloat>` 的取值范围表格
      • `<climits>` 头文件中定义的常量
      • `<cfloat>` 头文件中定义的常量
    • 2.3 浮点类型的取值范围
  • 💯`typedef` 关键字的使用
    • 3.1 `typedef` 的基本语法
    • 3.2 使用 `typedef` 简化代码
    • 3.3 复杂类型的简化
    • 3.4 使用 `typedef` 定义结构体别名
  • 💯`typedef` 与 `using` 的对比
  • 💯实际应用场景
  • 💯小结


在这里插入图片描述


💯前言

  • C++ 编程语言 中,深刻理解数据类型的存储长度取值范围,以及一些关键的语言特性如 typedef,是编写高效且可移植代码的基石。本文旨在通过详细讲解这些核心概念,提供深层次的背景知识、理论分析以及实际应用的示例,使读者能够全面掌握这些概念并在实践中灵活应用。
    C++ 参考手册
    在这里插入图片描述


💯C++ 中的数据类型的存储长度

在这里插入图片描述
每种数据类型都有其特定的存储长度与取值范围,这些特性决定了变量可以表示的数值大小以及所占用的内存空间。


1.1 数据类型的存储单位

  • 比特(bit):最小的存储单位,一个比特可以存储 01,是所有信息的基本构成单元。
  • 字节(byte):基本的存储单位,1 字节等于 8 比特。通常,一个字符(char)占用 1 字节,即 8 比特。
    在这里插入图片描述

字节与其他存储单位的换算关系

在计算机存储结构中,存储容量的单位逐级递增:

  • 1 字节(B) = 8 比特(bit)
  • 1 千字节(KB) = 1024 字节(B)
  • 1 兆字节(MB) = 1024 千字节(KB)
  • 1 千兆字节(GB) = 1024 兆字节(MB)
  • 1 太字节(TB) = 1024 千兆字节(GB)
  • 1 拍字节(PB) = 1024 太字节(TB)

在内存管理中,字节是数据分配的基本单位,而数据类型的长度则决定了其所占用的内存空间。
在这里插入图片描述


1.2 数据类型及其长度

在这里插入图片描述

数据类型字节数取值范围描述
char1-128 到 127用于存储单个字符
bool1truefalse用于存储布尔值
short2-32768 到 32767用于存储较小范围的整数
int4-2147483648 到 2147483647最常用的整数类型
long4 或 8-2147483648 到 2147483647 或更大在 Windows 通常为 4 字节,在 64 位 Linux 通常为 8 字节
long long8-9223372036854775808 到 9223372036854775807用于存储非常大的整数
float4约 3.4e-38 到 3.4e+38用于单精度浮点数
double8约 1.7e-308 到 1.7e+308用于双精度浮点数
long double16约 3.4e-4932 到 1.1e+4932用于扩展精度的浮点数

1.3 平台对数据类型长度的影响

数据类型的长度和取值范围可能因编译器和系统架构(如 32 位或 64 位系统)而有所差异。为了精确地了解数据类型在特定平台上的长度,我们可以使用 sizeof() 运算符,它返回数据类型或变量在内存中占用的字节数。
在这里插入图片描述

#include <iostream>
using namespace std;int main() {cout << "Size of char: " << sizeof(char) << " bytes" << endl;cout << "Size of int: " << sizeof(int) << " bytes" << endl;cout << "Size of long: " << sizeof(long) << " bytes" << endl;cout << "Size of long long: " << sizeof(long long) << " bytes" << endl;cout << "Size of float: " << sizeof(float) << " bytes" << endl;cout << "Size of double: " << sizeof(double) << " bytes" << endl;cout << "Size of long double: " << sizeof(long double) << " bytes" << endl;return 0;
}

在这里插入图片描述

在不同平台上运行此代码,longlong double 的长度可能会有明显差异,这种差异反映了不同硬件和操作系统对数据存储的处理方式。


💯数据类型的取值范围

在这里插入图片描述
C++ 提供了 <climits> 头文件,用于定义各整数类型的取值范围宏。以下列出了一些常见的宏:

  • CHAR_MINCHAR_MAXchar 类型的最小值和最大值。
  • SHRT_MINSHRT_MAXshort 类型的最小值和最大值。
  • INT_MININT_MAXint 类型的最小值和最大值。
  • LONG_MINLONG_MAXlong 类型的最小值和最大值。
  • LLONG_MINLLONG_MAXlong long 类型的最小值和最大值。

对于无符号类型(例如 unsigned int),最小值为 0,而最大值可以通过 UINT_MAX 来获得。

#include <iostream>
#include <climits>
using namespace std;int main() {cout << "char: " << CHAR_MIN << " to " << CHAR_MAX << endl;cout << "unsigned char: 0 to " << UCHAR_MAX << endl;cout << "short: " << SHRT_MIN << " to " << SHRT_MAX << endl;cout << "unsigned short: 0 to " << USHRT_MAX << endl;cout << "int: " << INT_MIN << " to " << INT_MAX << endl;cout << "unsigned int: 0 to " << UINT_MAX << endl;cout << "long: " << LONG_MIN << " to " << LONG_MAX << endl;cout << "unsigned long: 0 to " << ULONG_MAX << endl;cout << "long long: " << LLONG_MIN << " to " << LLONG_MAX << endl;cout << "unsigned long long: 0 to " << ULLONG_MAX << endl;return 0;
}

在这里插入图片描述


2.1 数据类型取值范围表格

在这里插入图片描述

类型取值范围速记最小值宏速记最大值宏
char-128 ~ 127CHAR_MINCHAR_MAX
unsigned char0 ~ 2550UCHAR_MAX
short-32768 ~ 32767SHRT_MINSHRT_MAX
unsigned short0 ~ 655350USHRT_MAX
int-2147483648 ~ 2147483647INT_MININT_MAX
unsigned int0 ~ 42949672950UINT_MAX
long-2147483648 ~ 2147483647LONG_MINLONG_MAX
unsigned long0 ~ 42949672950ULONG_MAX
long long-9223372036854775808 ~ 9223372036854775807LLONG_MINLLONG_MAX
unsigned long long0 ~ 184467440737095516150ULLONG_MAX

2.2 <climits><cfloat> 的取值范围表格

在这里插入图片描述


<climits> 头文件中定义的常量

在这里插入图片描述

类型最小值宏最大值宏无符号最大值宏
charCHAR_MINCHAR_MAXUCHAR_MAX
signed charSCHAR_MINSCHAR_MAX无(signed char 没有无符号版本)
unsigned charUCHAR_MAX
shortSHRT_MINSHRT_MAXUSHRT_MAX
unsigned shortUSHRT_MAX
intINT_MININT_MAXUINT_MAX
unsigned intUINT_MAX
longLONG_MINLONG_MAXULONG_MAX
unsigned longULONG_MAX
long longLLONG_MINLLONG_MAXULLONG_MAX
unsigned long longULLONG_MAX

<cfloat> 头文件中定义的常量

在这里插入图片描述

类型最小值宏最大值宏精度范围宏
floatFLT_MINFLT_MAXFLT_DIG(精度)
doubleDBL_MINDBL_MAXDBL_DIG(精度)
long doubleLDBL_MINLDBL_MAXLDBL_DIG(精度)

2.3 浮点类型的取值范围

对于浮点类型,C++ 提供了 <cfloat> 头文件,用于定义 floatdoublelong double 的最小值和最大值。

  • FLT_MINFLT_MAXfloat 的最小值和最大值。
  • DBL_MINDBL_MAXdouble 的最小值和最大值。
  • LDBL_MINLDBL_MAXlong double 的最小值和最大值。
    在这里插入图片描述

💯typedef 关键字的使用

在这里插入图片描述
typedef 是 C++ 中一个非常强大的关键字,用于为已有类型定义新的名称,以提高代码的可读性和简洁性。尤其是在定义复杂类型时,typedef 可以大大简化代码,使其更加易于理解和维护。


3.1 typedef 的基本语法

typedef 旧类型名 新类型名;
  • 旧类型名:要简化的类型。
  • 新类型名:定义的新名称,用于替代旧类型名。
    在这里插入图片描述

3.2 使用 typedef 简化代码

typedef unsigned int uint;  // 定义 uint 为 unsigned int 的别名
typedef long long ll;       // 定义 ll 为 long long 的别名
typedef unsigned long long ull; // 定义 ull 为 unsigned long long 的别名int main() {uint num1 = 10;  // 等价于 unsigned int num1 = 10;ll num2 = 123456789;  // 等价于 long long num2 = 123456789;ull num3 = 987654321; // 等价于 unsigned long long num3 = 987654321;return 0;
}

在这里插入图片描述


3.3 复杂类型的简化

对于复杂类型(如函数指针或结构体),typedef 的作用尤为重要。例如,使用 typedef 来定义函数指针类型,可以大幅度提高代码的可读性。

typedef int (*FuncPointer)(int, int);  // 定义函数指针类型
int add(int a, int b) {return a + b;
}int main() {FuncPointer fp = add;  // 使用 typedef 定义的函数指针int result = fp(10, 20);  // 调用函数cout << "Result: " << result << endl;return 0;
}

3.4 使用 typedef 定义结构体别名

在 C++ 中,结构体类型通常也可以用 typedef 来简化。

typedef struct {int x;int y;
} Point;  // 定义 Point 为匿名结构体的别名int main() {Point p = {10, 20};  // 使用 typedef 定义的结构体别名cout << "Point: (" << p.x << ", " << p.y << ")" << endl;return 0;
}

在这里插入图片描述


💯typedefusing 的对比

C++11 引入了 using 关键字,可以替代 typedef,并且在涉及模板时更为灵活。

using uint = unsigned int;  // 等价于 typedef unsigned int uint;
using ll = long long;
using ull = unsigned long long;

using 语法更为直观,特别是在模板编程中,其可读性和灵活性更强。因此,在现代 C++ 中,using 被广泛推荐使用。
在这里插入图片描述


💯实际应用场景

  • 简化常用类型:例如 typedef unsigned int uint;,减少代码的冗余,提升可读性。
  • 函数指针的定义:为复杂的函数指针定义别名,简化其声明和使用。
  • 跨平台支持:使用 typedefusing 根据不同平台定义不同的数据类型,以提高代码的跨平台适配性。
  • 数据结构命名:为结构体或类定义清晰的别名,使代码更加易于理解和维护。

在这里插入图片描述


💯小结

  • 在这里插入图片描述
    数据类型的长度与取值范围:不同的数据类型在不同平台上有不同的长度和取值范围。通过使用 sizeof()<climits><cfloat> 可以确定各类型的具体信息。
  • typedef 的使用typedef 可以简化类型名,使代码更具可读性,尤其在复杂类型如函数指针和结构体中非常有用。
  • using 的推荐使用:在现代 C++ 中,using 关键字更加灵活,尤其适用于模板类型的简化。

通过深入理解数据类型、sizeoftypedef 等概念,可以帮助程序员写出更高效、可读性强且易于维护的代码。这些基础知识对于 C++ 的深入学习和实际编程中的应用至关重要。希望本文的内容能够帮助你更好地掌握 C++ 中的数据类型及其相关概念,从而在编程实践中游刃有余。


在这里插入图片描述


版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com