【C++ 入坑指南】(05)数据类型

news2025/1/20 1:59:53

在这里插入图片描述

文章目录

    • 一、整型
      • sizeof 关键字
    • 二、实型(浮点型)
    • 三、字符型
    • 四、字符串型
      • 4.1 C 风格字符串
      • 4.2 C++ 引入的 string 类类型
    • 五、布尔类型(bool)
    • 六、类型转换
      • 6.1 静态转换(Static Cast)
      • 6.2 动态转换(Dynamic Cast)
      • 6.3 常量转换(Const Cast)
      • 6.4 重新解释转换(Reinterpret Cast)

C++ 规定在创建一个变量或常量时,必须要指定出相应的数据类型,否则无法给变量分配内存。

一、整型

作用:整型变量表示的是整数类型的数据。

C++ 中能够表示整型的类型有以下几种方式,区别在于所占内存空间不同

注意:不同系统会有所差异,一字节为 8 位。

数据类型占用空间取值范围
short2个字节-32768 到 32767
int4个字节-2147483648 到 2147483647
longWindows 为4个字节,Linux 为4个字节(32位),8字节(64位)-2147483648 到 2147483647
long long8个字节-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807

sizeof 关键字

作用:利用 sizeof 关键字可以统计数据类型所占内存大小。

语法:sizeof(数据类型 / 变量)

示例

#include <iostream>
#include <limits>

using namespace std;

int main()
{
	// short 
	cout << "short: \t\t" << "所占字节数:" << sizeof(short);

	cout << " short 的最大值: " << (numeric_limits<short>::max)() << " ,short 的最小值:" << (numeric_limits<short>::min)() << endl;

	// int
	cout << "int: \t\t" << "所占字节数:" << sizeof(int);

	cout << " int 的最大值: " << (numeric_limits<int>::max)() << " ,int 的最小值:" << (numeric_limits<int>::min)() << endl;

	// long
	cout << "long: \t\t" << "所占字节数:" << sizeof(long);

	cout << " long 的最大值: " << (numeric_limits<long>::max)() << " ,long 的最小值:" << (numeric_limits<long>::min)() << endl;

	// long long
	cout << "long long: \t\t" << "所占字节数:" << sizeof(long long);

	cout << " long long 的最大值: " << (numeric_limits<long long>::max)() << " ,long long 的最小值:" << (numeric_limits<long long>::min)() << endl;

	return 0;
}

二、实型(浮点型)

作用:用来表示小数

浮点型变量分为两种:

  1. 单精度 float;
  2. 双精度 double。

两者的区别在于表示的有效数字范围不同

数据类型占用空间有效数字范围
float4字节7位有效数字
double8字节15-16位有效数字

示例

#include <iostream>

using namespace std;

int main()
{
	// float
	float a = 3.14f;
	cout << "float: \t\t" << "所占字节数:" << sizeof(a) << endl;

	// double
	double d1 = 3.14;
	cout << "double: \t\t" << "所占字节数:" << sizeof(double) << endl;

	// 科学计数法
	float f1 = 4e2;  // 4 * 10 ^ 2 ,结果为400;
	cout << "f1 = " << f1 << endl;

	float f2 = 4e-2;  // 4 * 0.1 ^ 2 ,结果为0.04;
	cout << "f2 = " << f2 << endl;
	

	return 0;
}

三、字符型

作用:字符型变量用来显示单个字符,所占 1 个字节。

语法char ch = 'A';

注意

  1. 在显示字符型变量时,用单引号将字符括起来,不要用双引号;
  2. 单引号内只能有一个字符,不可以是字符串。
  3. 字符型变量对应的ASCII编码: a - 97,A - 65

四、字符串型

C++ 提供了以下两种类型的字符串表示形式:

  • C 风格字符串
  • C++ 引入的 string 类类型

4.1 C 风格字符串

语法char 变量名[ ] = "字符串值";

示例

int main()
{
	char str1[] = "Hello Kevin";

	cout << str1 << endl;
	

	return 0;
}

注意:

  1. 变量名后面需要加[ ] ;
  2. 字符串要用双引号括起来。

4.2 C++ 引入的 string 类类型

语法string 变量名 = "字符串值";

示例

#include <iostream>
#include <string>

using namespace std;

int main()
{
	string str = "Hello Kevin";

	cout << str << endl;
	
	return 0;
}

注意:需要加入头文件 #include <string>

五、布尔类型(bool)

作用:布尔数据类型代表真或假的值,常用于条件判断,占1个字节。

bool 类型只有两个值:

  • true ---- 真(本质是1)
  • false ---- 假(本质是0)

六、类型转换

C++ 中有四种类型转换:静态转换、动态转换、常量转换和重新解释转换。

6.1 静态转换(Static Cast)

作用:将一种数据类型的值强制转换为另一种数据类型的值。例如:将 int 类型转换为 char 类型。
示例

int main()
{
	//int 转 char
	int a = 95;
	char c = static_cast<char>(a);
	cout << c << endl;

	return 0;
}

6.2 动态转换(Dynamic Cast)

作用:只用于类继承结构中基类和派生类之间指针或引用的转换,可以进行向上、向下,或者横向的转换。

示例

int main()
{
	struct B { virtual void test() {} };
	struct D1 : virtual B { };
	struct D2 : virtual B { };
	struct MD : D1, D2 { };

	D1* pd1 = new MD();
	cout << pd1 << endl;

	// 向上转型
	B* pb = dynamic_cast<B*>(pd1);
	cout << pb << endl;

	// 向下转型
	MD* pmd = dynamic_cast<MD*>(pd1);
	cout << pmd << endl;

	// 横向转型
	D2* pd2 = dynamic_cast<D2*>(pd1);
	cout << pd2 << endl;

	return 0;
}

6.3 常量转换(Const Cast)

作用:不能去除变量的常量性,只能用来去除指向常数对象的指针或引用的常量性,且去除常量性的对象必须为指针或引用。

示例

int main()
{
	const int val = 6;

	cout << "&val=" << &val << ", val=" << val << endl;

	const int* cp = &val;
	int* p = const_cast<int*>(cp);
	*p = 2;

	cout << "&val=" << &val << ", val=" << val << endl;
	cout << "p=" << p << ", *p=" << *p << endl;

	return 0;
}

6.4 重新解释转换(Reinterpret Cast)

作用:将一个数据类型的值重新解释为另一个数据类型的值,通常用于在不同的数据类型之间进行转换。

示例:将地址转换成整数

int main()
{
	struct B { int val; };

	B b{ 101 };

	cout << "&b=" << &b << endl;
	long addr = reinterpret_cast<long>(&b);
	cout << "addr=" << addr << endl;

	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/523185.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软考A计划-真题-分类精讲汇总-第六章(软件工程)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

阿里云服务器安装宝塔Linux面板教程图解

使用阿里云服务器安装宝塔面板教程&#xff0c;阿里云服务器网以CentOS操作系统为例&#xff0c;安装宝塔Linux面板&#xff0c;先远程连接到云服务器&#xff0c;然后执行宝塔面板安装命令&#xff0c;系统会自动安装宝塔面板&#xff0c;安装完成后会返回面板地址、账号和密码…

【mongoDB】mongodb权限验证 || mongodb重启 || mongodb常用命令

mongodb版本号 6.0 前言 mongoDB刚开始无需密码登录mongoDB有3默认数据库&#xff0c;分别为&#xff1a; admin 超级用户&#xff0c;能对所有数据库操作&#xff0c;执行管理员命令config 分片集群配置的数据库local 分片集群锁信息的集合test 这个数据库一般是隐式创建的&…

新书出版了(文末送书)

大家好&#xff0c;我是麦哥。 最近一位好友的新书出版了&#xff0c;由衷的替他开心&#xff0c;赶紧来支持一波。 新书长这样 这本书的作者是前中兴高级工程师&#xff0c;某知名培训机构的教学总监&#xff0c;现于某研究所担任重要的研发工作&#xff0c;我喜欢叫他彭老师。…

路径规划算法:基于蚁狮优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于蚁狮优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于蚁狮优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法蚁狮…

路径规划算法:基于蝗虫优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于蝗虫优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于蝗虫优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法蝗虫…

Python爬虫之美丽的汤——BeautifulSoup

本文概要 本篇文章主要介绍利用Python爬虫之美丽的汤——BeautifulSoup&#xff0c;适合练习爬虫基础同学&#xff0c;文中描述和代码示例很详细&#xff0c;干货满满&#xff0c;感兴趣的小伙伴快来一起学习吧&#xff01; 是不是以为今天要教大家怎么做饭&#xff1f;确实&…

MATLAB图像处理:图像分割、特征提取和目标识别的应用和优化

MATLAB图像处理&#xff1a;图像分割、特征提取和目标识别的应用和优化 作为一种常用的图像处理工具&#xff0c;MATLAB在图像分割、特征提取和目标识别等方面具有广泛的应用。本文将详细介绍这三个方面的应用和优化。 第一章&#xff1a;图像分割 图像分割是将一幅图像划分成…

阿里云服务器安装宝塔面板教程图解(超详细)

使用阿里云服务器安装宝塔面板教程&#xff0c;阿里云服务器网以CentOS操作系统为例&#xff0c;安装宝塔Linux面板&#xff0c;先远程连接到云服务器&#xff0c;然后执行宝塔面板安装命令&#xff0c;系统会自动安装宝塔面板&#xff0c;安装完成后会返回面板地址、账号和密码…

Django如何把SQLite数据库转换为Mysql数据库

大部分新手刚学Django开发的时候默认用的都是SQLite数据库&#xff0c;上线部署的时候&#xff0c;大多用的却是Mysql。那么我们应该如何把数据库从SQLite迁移转换成Mysql呢&#xff1f; 之前我们默认使用的是SQLite数据库&#xff0c;我们开发完成之后&#xff0c;里面有许多数…

『python爬虫』20. 用协程爬取一本小说(保姆级图文)

目录 1. 分析目标网站1.1 寻找所有章节信息1.2 寻找章节内容 2. 爬虫思路获取得到的信息首先要同步协程获取所有章节标题和cid写入异步任务然后根据章节标题和cid获取章节内容 3. 完整实现代码总结 欢迎关注 『python爬虫』 专栏&#xff0c;持续更新中 欢迎关注 『python爬虫』…

linux命令文本命令之~~~ sort ~~ tr ~~cut ~~ uniq ~~split~~~paste~~eval

目录 一. sort命令二. uniq 命令三. tr命令四. cut命令五 . split六. paste 合并文件内容的列七. eval命令 一. sort命令 以行为单位对文件内容进行排序&#xff0c;也将他根据不同的数据类型来排序 比较原则是从首字符向后&#xff0c;依次按ASCII码进行比较&#xff0c;最后…

龟兔赛跑,环形链表解题思路:用兔子的速度,龟的智慧,和链表的结构,解决力扣难题

本篇博客会讲解力扣“141. 环形链表”的解题思路&#xff0c;这是题目链接。 审题 先来审题&#xff1a; 以下是输出示例&#xff1a; 以下是提示&#xff1a; 以下是进阶&#xff1a; 思路 本题有一种非常巧妙的解法&#xff1a;快慢指针法&#xff0c;又称龟兔赛跑法…

SpringBoot——默认页面在哪里?

简单介绍&#xff1a; 在之前我们创建了一个SpringBoot的应用程序&#xff0c;并且我们也启动了&#xff0c;但是我们都是在postman或者是在控制台看到了我们的界面&#xff0c;那么在浏览器中看到的界面其实只有一个&#xff1a; 这个界面其实就是SpringBoot的报错默认界面&a…

buuctf8

目录 crypto 摩丝 password 变异凯撒 Quoted-printable Rabbit web [护网杯 2018]easy_tornado [HCTF 2018]admin misc 被劫持的神秘礼物​编辑 crypto 摩丝 下载文件&#xff0c;得到一串摩斯密码 在线解码 password 下载文件 张三英文zs&#xff0c;加上生日&a…

opencv_contrib模块编译与安装

前言 由于opencv_contrib模块的安装依赖于opencv基础模块&#xff0c;所以看该教程前请先看一遍OpenCV基础模块安装教程 下载 下载 opencv_contrib模块&#xff08;需要与opencv基础模块版本号4.6.0相同&#xff0c;国内可以在gitcode下载&#xff09; 配置、编译、安装 打…

网工视角看基础网络,原来这么与众不同

大家好&#xff0c;我是老杨。 前两天去华为生态大会刚回来&#xff0c;颇为感慨。 感慨万物互联的世界越来越大&#xff0c;网络渗透度也越来越极致化。 网络很大&#xff0c;非常大&#xff0c;但在网工眼里&#xff0c;网络复杂又美妙&#xff0c;有着外行人难以理解的魅…

大数据Doris(十九):Doris索引介绍与前缀索引

文章目录 Doris索引介绍与前缀索引 一、Doris索引介绍 二、前缀索引 Doris索引介绍与前缀索引 一、Doris索引介绍 索引用于帮助快速过滤或查找数据。目前 Doris 主要支持两类索引: 内建的智能索引,包括前缀索引和 ZoneMap

【Prompting】ChatGPT Prompt Engineering开发指南(2)

ChatGPT Prompt Engineering开发指南2 从产品概况表生成营销产品描述问题1&#xff1a;文本太长问题2: 文本聚焦于错误的细节问题3&#xff1a;描述需要一个尺寸表 加载Python库查看HTML内容来源 在本教程中&#xff0c;学习迭代分析并完善给出的提示&#xff0c;以从结果概况表…

20230514 Google宣布引入生成式人工智能搜索引擎

&#x1f680; Google宣布引入生成式人工智能搜索引擎&#xff0c;可能是最大变化之一。 Google宣布引入生成式人工智能搜索引擎&#xff0c;可能是最大变化之一。 新搜索将使用人工智能模型整合互联网信息&#xff0c;更好地响应用户需求。然而&#xff0c;网络出版商担心这…