【009】C++数据类型之转义字符和类型转换

news2024/10/5 16:22:46

C++数据类型之转义字符和类型转换

  • 引言
  • 一、转义字符
    • 1.1、概念
    • 1.2、八进制转义
    • 1.3、十六进制转义
  • 二、类型转换
    • 2.1、自动类型转换原则
    • 2.2、强制类型转换
  • 三、C++新特性中类型转换的扩展
    • 3.1、隐式类型转换
    • 3.2、显式类型转换
  • 总结

引言


💡 作者简介:专注于C/C++高性能程序设计和开发,理论与代码实践结合,让世界没有难学的技术。包括C/C++、Linux、MySQL、Redis、TCP/IP、协程、网络编程等。
👉
🎖️ CSDN实力新星,社区专家博主
👉
🔔 专栏介绍:从零到c++精通的学习之路。内容包括C++基础编程、中级编程、高级编程;掌握各个知识点。
👉
🔔 专栏地址:C++从零开始到精通
👉
🔔 博客主页:https://blog.csdn.net/Long_xu


🔔 上一篇:【008】C++数据类型之重要关键字详解

一、转义字符

1.1、概念

\和某些字符结合产生新的字符含义就是转义字符。

转义字符是以反斜杠(\)开始的特殊字符,它们被用于表示一些不可打印的字符、控制符号或者特殊的字符序列。在C++中,常见的转义字符包括:

  • \n:换行符
  • \r:回车符
  • \t:制表符
  • \b:退格符
  • \f:换页符
  • \ \:反斜杠本身
  • \ ':单引号
  • \ ":双引号

例如,下面的代码使用了一些转义字符:

#include <iostream>
using namespace std;

int main() {
    cout << "Hello\tworld!\n";
    cout << "What\'s up?\n";
    cout << "This is a backslash: \\ \n";
    return 0;
}

输出结果:

Hello   world!
What's up?
This is a backslash: \

1.2、八进制转义

格式:

'\ddd'

每个d的范围必须是0~7,3个d表示最多识别3位八进制数据。例如:

'\123';  // 符合八进制转义
'\18';   // 超出了7,是两个字符
'\1234'; // 超出了三位,是两个字符
'\183';  // 超出了7,是三个字符

1.3、十六进制转义

格式:

'\xhh'

每个h的范围是0~9、A ~ F,2个h表示最多识别2位十六进制,x符号是必须包含的。

'\af';// 错误,没有x
'\123';// 正确,是八进制转义
'\x3df';// 错误,超过两位
'\xab'; // 正确

二、类型转换

数据有不同的类型,不同类型数据之间进行混合运算时必然涉及到类型的转换问题。

转换的方法有两种:

  • 自动转换:遵循一定的规则,由编译系统自动完成。
  • 强制类型转换:把表达式的运算结果强制换成所需的数据类型。

2.1、自动类型转换原则

  1. 占用内存字节数少(值域小)的类型,向占用内存字节数多(值域大)的类型转换,以保证精度不降低。
  2. 转换方向:
    在这里插入图片描述
    示例1:无符号和有符号参加运算,需要将有符号转换成无符号。
int data=-10;
unsigned int data2=6;
if(data+data2>0)
{
	cout<<"大于0"<<endl;
}
else
{
	cout<<"小于0"<<endl;
}
// 输出 大于0

示例2:int和double参加运算,会将int转换成double类型。

int data=0;
double data2=0.0;
cout<<sizeof(data+data2)<<endl; // 输出8

示例3:char和short类型只要参加运算就会将自己转换成int类型。

char ch='a';
short sh=0;
cout<<sizeof(ch+ch)<<endl;// 输出4
cout<<sizeof(sh+sh)<<endl;// 输出4
cout<<sizeof(ch+sh)<<endl;// 输出4

自动类型转换是为了保证精度不丢失。

2.2、强制类型转换

格式:

(类型说明符) (表达式)

功能:把表达式的运算结果强制转换成类型说明符所表示的类型。

强制类型转换能让程序通过编译和运行,对于运行结果(精度方面)不保证。

例子:

float p=0.0f;

(int)p+1; // p强制转换为int类型,然后+1
(int)(p+1); // p+1强制转换为int

注意:不管是自动类型转换还是强制类型转换,都是临时的,不会更改原始变量的类型。

三、C++新特性中类型转换的扩展

C++中的类型转换可分为隐式类型转换和显式类型转换两种。

3.1、隐式类型转换

隐式类型转换是指编译器自动将一个数据类型转换为另一个数据类型,而无需编写额外的代码。例如,当不同类型的数据进行运算时,编译器会自动将其中一个数据类型转换为和另一个数据类型相同的类型,然后再进行运算。又如,当将一个较小的整数赋值给一个较大的整数变量时,编译器也会自动进行类型转换。

3.2、显式类型转换

显式类型转换是指程序员在代码中显式地指定将一个数据类型转换为另一个数据类型。C++提供了以下四种显式类型转换:

  1. static_cast:用于基本数据类型之间的转换,如将int型转换为double型;
  2. dynamic_cast:用于类类型之间的转换,用于安全地进行向下转型(将基类指针或引用转换为派生类指针或引用);
  3. const_cast:用于删除const属性,如将const int型变量转换为int型变量;
  4. reinterpret_cast:用于不同类型的指针之间的转换,如将int型指针转换为char型指针。

例如,下面的代码演示了使用static_cast将int型变量转换为double型变量:

#include <iostream>
using namespace std;

int main()
{
    int a = 10;
    double b = static_cast<double>(a);  // 将int型变量a转换为double型变量b
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    return 0;
}

输出结果为:

a = 10
b = 10

总结

C++类型转换是将一种数据类型的值转换为另一种数据类型的操作。
在这里插入图片描述

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

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

相关文章

Packet Tracer – 配置单臂路由器 VLAN 间路由

Packet Tracer – 配置单臂路由器 VLAN 间路由 地址分配表 设备 接口 IPv4 地址 子网掩码 默认网关 R1 G0/0.10 172.17.10.1 255.255.255.0 不适用 G0/0.30 172.17.30.1 255.255.255.0 不适用 PC1 NIC 172.17.10.10 255.255.255.0 172.17.10.1 PC2 NIC 1…

游乐园里,一边带小孩,一边写代码,分享一些有趣好玩儿的嵌入式软硬件资讯...

作者&#xff1a;晓宇&#xff0c;排版&#xff1a;晓宇 微信公众号&#xff1a;芯片之家&#xff08;ID&#xff1a;chiphome-dy&#xff09; 01 边带小孩边写代码 以前觉得&#xff0c;自己下班后都还有大把时间&#xff0c;下班了回到家还能再干个两三个小时&#xff0c;学…

定义运营系统架构

介绍 供应商提供的信息系统随着新功能和实施策略不断发展。可用选项的复杂性和多样性使许多公司难以充分讨论和比较可能满足或不满足其要求的替代方案。 供应商通常会推广由公司或个人工具箱中的产品或解决方案支持的架构。如果公司对其运营系统的架构没有清晰的愿景&#xf…

第九章:C语言的简单结构体

作为一个人有什么关于人的属性呢&#xff1f;简单的梳理一下&#xff0c;人的属性有自己的名字&#xff0c;年龄&#xff0c;身高&#xff0c;体重...。当然关于人的属性还有很多&#xff0c;当我们C语言来描述一下人的属性&#xff0c;就需要定义多个变量&#xff0c;那我们这…

21天学会C++:Day4----函数重载

CSDN的uu们&#xff0c;大家好。这里是C入门的第四讲。 座右铭&#xff1a;前路坎坷&#xff0c;披荆斩棘&#xff0c;扶摇直上。 博客主页&#xff1a; 姬如祎 收录专栏&#xff1a;C专题 目录 1. 知识引入 2. 函数重载的知识点 2. 为什么C语言不支持函数重载而C支持呢&…

springboot贫困生勤工助学评定管理系统

本系统尝试使用springboot在网上架构一个动态的贫困生管理系统&#xff0c;以使每一用户在家就能通过系统来进行贫困生管理。 Spring Boot 是 Spring 家族中的一个全新的框架&#xff0c;它用来简化Spring应用程序的创建和开发过程。也可以说 Spring Boot 能简化我们之前采用S…

数据结构学习记录——图应用实例-拯救007(问题描述、解题思路、伪代码解读、C语言算法实现)

目录 问题描述 解题思路 伪代码 总体算法 DFS算法 伪代码解读 总体算法 DFS算法 具体实现&#xff08;C语言&#xff09; 问题描述 在老电影“007之生死关头”&#xff08;Live and Let Die&#xff09;中有一个情节&#xff0c;007被毒贩抓到一个鳄鱼池中心的小岛…

Matlab - Plot in plot(图中画图)

Matlab - Plot in plot&#xff08;图中画图&#xff09; 这是在MATLAB中创建一个嵌入式图形的示例&#xff0c;可以在另一个图形中显示。 与MATLAB中的“axes”函数相关。 Coding % Create data t linspace(0,2*pi); t(1) eps; y sin(t);% Place axes at (0.1,0.1) with w…

学系统集成项目管理工程师(中项)系列24a_信息系统集成专业技术知识(上)

1. 信息系统的生命周期 1.1. 【19下选10】 1.2. 立项 1.2.1. 形成《需求规格说明书》并确定立项 1.2.1.1. 【21上选11】 1.3. 开发 1.3.1. 【22下选10】 1.3.2. 以立项阶段所做的需求分析为基础&#xff0c;进行总体规划。之后&#xff0c;通过系统分析、系统设计、系统…

ChatGPT4 镜像网站推荐

文章目录 1. TomChat2. Ai Doge3. 二狗问答4. 小莓用AI5. Ora6. ChatGPT镜像7. ChatGPT镜像8. VIVI-AI9. 小杰AI10. ChatGPT Web11. AIchatOS 什么是ChatGPT? ChatGPT&#xff0c;全称&#xff1a;聊天生成预训练转换器&#xff08;英语&#xff1a;Chat Generative Pre-train…

辅助驾驶功能开发-功能规范篇(16)-2-领航辅助系统NAP-HMI人机交互

书接上回 2.3.7HMI人机交互 2.3.7.1显示 (1)图标 序号 图标状态 (图形、颜色供参考) 含义说明 备注 1 辅助驾驶功能READY

Winform窗体利用WebApi接口实现ModbusTCP数据服务

在上位机开发过程中&#xff0c;有时候会遇到需要提供数据接口给MES或者其他系统&#xff0c;今天跟大家分享一下&#xff0c;如何在Winform等桌面应用程序中&#xff0c;开发WebApi接口&#xff0c;提供对外modbus设备的数据服务。通讯模型是&#xff1a; 为了更好地演示应用场…

华为OD机试真题 Java 实现【简单的解压缩算法】【2023Q1 200分】

一、题目描述 现需要实现一种算法&#xff0c;能将一组压缩字符串还原成原始字符串&#xff0c;还原规则如下&#xff1a; 1、字符后面加数字N&#xff0c;表示重复字符N次。例如&#xff1a;压缩内容为A3&#xff0c;表示原始字符串为AAA。 2、花括号中的字符串加数字N&…

MyBatis环境搭建+第一个MyBatis程序

目录 1.MyBatis是什么&#xff1f; 2.MyBatis开发环境搭建 3.我的第一个MyBatis程序 1.MyBatis是什么&#xff1f; MyBatis是一款数据库框架&#xff0c;是一款优秀的持久层框架&#xff0c;它不仅支持用户自定义SQL和存储过程&#xff0c;而且还具有高级映射功能。简单来说…

【重新定义matlab强大系列九】函数isoutlier查找数据中的离群值

&#x1f517; 运行环境&#xff1a;Matlab &#x1f6a9; 撰写作者&#xff1a;左手の明天 &#x1f947; 精选专栏&#xff1a;《python》 &#x1f525; 推荐专栏&#xff1a;《算法研究》 #### 防伪水印——左手の明天 #### &#x1f497; 大家好&#x1f917;&#x1f91…

【TikZ 简单学习(上):基础绘制】Latex下的绘图宏包

【TikZ 简单学习[上]基础绘制】Latex下的绘图宏包 前置简单图形绘制基本架构路径绘制添加样式/风格弧线绘制剪切抛物线和正弦曲线绘制填充和绘制渲染绘制箭头循环添加文本信息绘制一个角度 前置 Latex 可以解决绘制这些东西&#xff1a; ∫ a b 1 x d x \int_a^b\frac{1}{x}dx…

DoFE:Domain-oriented Feature Embedding

key : 通过利用多源领域的知识来提高CNN在未见目标领域上的泛化能力。 我们的DoFE框架通过动态丰富图像特征与来自多源领域学习的附加领域先验知识相结合&#xff0c;使语义特征更具辨别性。引入了一个领域知识池来学习和记忆从多源领域提取的先验信息。 然后&#xff0c;原始…

Raidrive安装配置,结合alist实现将webdav网盘挂载为本地磁盘(保姆级教程)

目录 1. 下载安装2. 添加网盘3. 常见报错3.1 不要勾选安全连接3.2 路径必须填写正确 4. 测试效果总结 欢迎关注 『发现你走远了』 博客&#xff0c;持续更新中 欢迎关注 『发现你走远了』 博客&#xff0c;持续更新中 书接上文 AList挂载工具安装搭建使用教程&#xff0c;快速访…

【数据结构】一文读懂循环队列的实现细节

循环队列最早出现在计算机系统设计中&#xff0c;它的出现主要是为了满足实际需求&#xff1a;在存储机制上&#xff0c;传统的队列存储方式难以满足一些实际应用中需要存储大量数据的场景。在有限的数组空间内&#xff0c;传统的队列存储方式可能会出现存储空间浪费过多、存储…

【操作系统】线程简介

线程简介 线程概念 在许多经典的操作系统教科书中&#xff0c;总是把进程定义为程序的执行实例&#xff0c;它并不执行什么, 只是维护应用程序所需的各种资源&#xff0c;而线程则是真正的执行实体。 所以&#xff0c;线程是轻量级的进程&#xff08;LWP&#xff1a;light w…