C++ —— 数据类型转换和数据类型的别名

数据类型转换

  • 引言
  • 自动类型转换
  • 强制类型转换
  • 数据类型的别名

引言

计算机进行运算时,要求各操作数数据类型大小存储方式都要相同。(例如:8字节的整数和8字节的浮点数,虽然占用内存大小一样,但是存储方式不同,所以两者不能直接进行运算)
在实际开发中,不同类型的数据进行混合运算是基本需求。
自动类型转换:某些类型的转换编译器可以隐式进行,不需程序员干预。
强制类型转换:有些类型的转换需要程序员显式指定

自动类型转换

不同数据类型的差别在于取值范围精度,数据的取值范围越大精度越高
整型 ->
char -> short -> int -> long -> long long
浮点型 ->
float -> double -> long double
自动类型转换的规则如下:

  • 如果一个表达式中出现了不同类型操作数的混合运算,较低类型自动较高类型转换;
#include <iostream>
using namespace std;int main() {char n1 = 123; // 占用1字节int n2 = 98465; // 占用4字节long long n3 = 123456789000000; // 占用8字节,把n1和n2转换成n3肯定没问题。cout << "n1 + n2 + n3 = " << n1 + n2 + n3 << endl;return 0;
}

在运算之前,编译器会先把n1n2先转换成long long类型,再和n3进行运算。

  • 当表达式中含有浮点型操作数时,所有操作数都将转换浮点型,其实就是把更小的操作数转换更大的操作数,这种转换没有风险;运行如下代码:
cout << "8 / 5 = " << 8 / 5 << endl; // 0.6会被舍弃掉
cout << "8.0 / 5 = " << 8.0 / 5 << endl;

运行结果如下:

8 / 5 = 1
8.0 / 5 = 1.6

这是因为整数和浮点数的存储方式不同。不管小数点后面的数字是大还是小,整数都没办法保存它。

  • 赋值运算的右值类型与左值类型不一致时,将右值类型提升/降低为左值类型;
int n4 = 'a'; // 'a'为char类型,取值范围小于int,赋值时自动转换为int类型
cout << "n4 = " << n4 << endl;int n5 = 123.456; // 123.456为double类型,取值范围大于int,赋值时自动转换为int类型,小数部分舍弃
cout << "n5 = " << n5 << endl;

运行结果如下:

n4 = 97
n5 = 123

  • 赋值运算右值超出了左值类型的表示范围,把该右值截断后赋给左值,所得结果可能毫无意义。
int n6 = 4294967295 + 1;
cout << "n6 = " << n6 << endl;

运行结果如下:

n6 = 0

强制类型转换

为了让程序设计更灵活,转换的目的更清晰,C++提供了强制类型转换的方法,也称之为显式转换
强制类型转换的语法:(目标类型) 表达式
示例代码如下:

cout << "(double) 8 / 5 = " << (double) 8 / 5 << endl;

运行结果如下:

(double) 8 / 5 = 1.6

注意:

  • 如果使用强制转换,表示已有明确的目的
  • 如果采用了强制类型转换,编译的告警信息不再出现
int n6 = (int) 4294967295 + 1; // 如果不强制转成(int),编译会通过,但编译器会提出告警信息。
cout << "n6 = " << n6 << endl;
  • 类型转换运算符的优先级比较高,如果没把握就加括号

数据类型的别名

创建数据类型别名的目的:

  • 为名称复杂的类型创建别名方便书写和记忆;
  • 创建与平台无关的数据类型,提高程序的兼容性
    语法:typedef 原数据类型名 别名
    C++11还可以用using关键字创建数据类型的别名。
    示例代码如下:
#include <iostream>
using namespace std;int main()
{// 在VS中,short是两个字节,int是四个字节,long也是四个字节,long long是八个字节。typedef short         int16_t;    // 16位的整数。typedef int             int32_t;    // 32位的整数。typedef long long int64_t;    // 64位的整数。// 在Linux中,short是两个字节,int是四个字节,long也是八个字节,long long也是八个字节。typedef short         int16_t;    // 16位的整数。typedef int             int32_t;    // 32位的整数。typedef long          int64_t;    // 64位的整数。// 在程序源代码中,只使用别名int16_t、int32_t、int64_t,不使用原名。
}

感谢浏览,一起学习!

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

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

相关文章

Kali 自动化换源脚本编写与使用

1. 背景与需求 在使用 Kali Linux 的过程中&#xff0c;软件源的配置对系统的更新与软件安装速度至关重要。 Kali 的默认官方源提供了安全且最新的软件包&#xff0c;但有时由于网络条件或地理位置的限制&#xff0c;使用官方源可能会出现速度较慢的问题。 为了解决这一问题&a…

【Unity3D】ECS入门学习(十二)IJob、IJobFor、IJobParallelFor

IJob&#xff1a;开启单个线程进行计算&#xff0c;线程内不允许对同一个数据进行操作&#xff0c;也就是如果你想用多个IJob分别计算&#xff0c;将其结果存储到同一个NativeArray<int>数组是不允许的&#xff0c;所以不要这样做&#xff0c;如下例子就是反面教材&#…

InfoNCE Loss详解(上)

引言 InfoNCE对比学习损失是学习句嵌入绕不开的知识点&#xff0c;本文就从头开始来探讨一下它是怎么来的。 先验知识 数学期望与大数定律 期望(expectation&#xff0c;expected value&#xff0c;数学期望&#xff0c;mathematical expectation)是随机变量的平均值&#…

.Net加密与Java互通

.Net加密与Java互通 文章目录 .Net加密与Java互通前言RSA生成私钥和公钥.net加密出数据传给Java端采用java方给出的公钥进行加密采用java方给出的私钥进行解密 .net 解密来自Java端的数据 AES带有向量的AES加密带有向量的AES解密无向量AES加密无向量AES解密 SM2(国密)SM2加密Sm…

工作中常用Vim的命令

Hi, 我是你们的老朋友&#xff0c;主要专注于嵌入式软件开发&#xff0c;有兴趣不要忘记点击关注【码思途远】 目录 0. ctags -R 1.认识 Vim的几种工作模式 2.高频使用命令 2.1 修改文件 2.2 关于行号 2.3 删除多行&#xff0c;删除部分 2.4 复制粘贴 2.5 光标移动 2.…

什么是 Azure OpenAI ?了解微软 Azure OpenAI 和 OpenAI 的关系

一、什么是Azure OpenAI &#xff1f; 微软已与 OpenAI 合作以实现三个主要目标&#xff1a; ⦿利用 Azure 的基础结构&#xff08;包括安全性、合规性和区域可用性&#xff09;&#xff0c;帮助用户构建企业级应用程序。 ⦿在微软产品&#xff08;包括 Azure AI 产品以及以外…

Linux day 1129

家人们今天继续学习Linux&#xff0c;ok话不多说一起去看看吧 三.Linux常用命令 3.1 Linux命令体验 3.1.1 常用命令演示 在这一部分中&#xff0c;我们主要介绍几个常用的命令&#xff0c;让大家快速感 受以下 Linux 指令的操作方式。主要包含以下几个指令&#xff1a; ls命…

SAP HCM 标准报表与前台操作的增强差异逻辑分析(rhgrenz4)

导读 增强差异:SAP的HCM模块组织和人事增强都有标准的增强点&#xff0c;不管你调用标准的函数还是前台操作都会触发对应的增强。所以很多业务不需要考虑那么多分散点&#xff0c;只要找到一个合适的增强点&#xff0c;就能解决很多和外围系统集成的业务逻辑&#xff0c;今天遇…

EZ-USB™ FX3 USB 5 Gbps 外设控制器

EZ-USB™ FX3 USB 5 Gbps 外设控制器 EZ-USB™ FX3 提供 USB 5Gbps 至 32 位数据总线&#xff0c;并配备 ARM9&#xff0c;可为任何系统添加 USB 3.0 连接 英飞凌的 EZ-USB™ FX3 是业界用途最广泛的 USB 外围设备控制器&#xff0c;可以为几乎任何系统添加 USB 5Gbps 连接。 …

【数据仓库】spark大数据处理框架

文章目录 概述架构spark 架构角色下载安装启动pyspark启动spark-sehll启动spark-sqlspark-submit经验 概述 Spark是一个性能优异的集群计算框架&#xff0c;广泛应用于大数据领域。类似Hadoop&#xff0c;但对Hadoop做了优化&#xff0c;计算任务的中间结果可以存储在内存中&a…

数据库容灾备份的意义+分类+执行工具!

数据库容灾解决方案的背景 数据库容灾&#xff08;Disaster Recovery&#xff0c;DR&#xff09;解决方案的背景主要源于企业对数据安全性、业务连续性和系统高可用性的需求。随着数字化转型的加速&#xff0c;企业的数据量迅猛增长&#xff0c;数据库已成为支撑核心业务的关键…

PDF怎么压缩得又小又清晰?5种PDF压缩方法

PDF 文件在日常办公与学习中使用极为频繁&#xff0c;可想要把它压缩得又小又清晰却困难重重。一方面&#xff0c;PDF 格式本身具有高度兼容性&#xff0c;集成了文字、图像、矢量图等多样元素&#xff0c;压缩时难以兼顾不同元素特性&#xff0c;稍不注意&#xff0c;文字就会…

GoldenDB组件及对应的用户和进程

1. GoldenDB组件及对应的用户和进程 GoldenDB数据库由管理节点、全局事务节点GTM、计算节点CN、数据节点DN等组成。 1.1. 管理节点 管理节点分为集群管理、Insight运维管理平台&#xff08;InsightServer、RDB、ZK&#xff09;。 1.1.1. 集群管理 1. 集群管理包括Metadatas…

OpenStack系列第四篇:云平台基础功能与操作(Dashboard)

文章目录 1. 镜像&#xff08;Image&#xff09;添加镜像查看镜像删除镜像 2. 卷&#xff08;Volume&#xff09;创建卷查看卷删除卷 3. 网络&#xff08;虚拟网络&#xff09;创建网络查看网络删除网络 4. 实例类型创建实例类型查看实例类型删除实例类型 4. 密钥对&#xff08…

CSDN编辑器

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

四大自平衡树对比:AVL树、红黑树、B树与B+树

AVL树、红黑树、B树和B树的对比与应用场景 树系列相关文章&#xff08;置顶&#xff09; 1、从链表到平衡树&#xff1a;二叉查找树的退化与优化 2、自平衡二叉查找树&#xff1a;如何让二叉查找树始终保持高效 3、AVL树入门&#xff1a;理解自平衡二叉查找树的基础 4、红黑树全…

Linux下读取Windows下保存的文件,报错信息中出现“^M“时如何解决?【由于Windows和Linux的换行方式不同造成的-提供两种转换方式】

Windows 和 Linux 的文本文件使用的换行符不同&#xff1a; Windows 使用 \r\n &#xff08;回车 换行&#xff09;。Linux 使用 \n &#xff08;换行&#xff09;。 因此&#xff0c;当在 Linux 系统上运行带有 Windows 换行符的脚本或读取相关文件时&#xff0c;可能会出现…

npm ERR! ECONNRESET 解决方法

问题&#xff1a;npm 命令遇到的错误是 ECONNRESET&#xff0c;这通常与网络连接问题相关。设置代理解决问题。 一、查看当前代理设置 npm config get proxy npm config get https-proxy二、设置代理 npm config set proxy http://your-proxy-address:port npm config set h…

【UE5】UnrealEngine源码构建2:windows构建unreal engine 5.3.2

参考大神知乎的文章:UE5 小白也能看懂的源码编译指南 据说会耗费400G的空间。 代码本身并不大,可能是依赖特别多,毕竟看起来UE啥都能干,核心还是c++的, 【UE5】UnrealEngine源码构建1:tag为5.3.2源码clone 本着好奇+ 学习的态度,想着也许有机会能更为深入的熟悉UE的机制…

在Linux上获取MS(如Media Server)中的RTP流并录制为双轨PCM格式的WAV文件

在Linux上获取MS(如Media Server)中的RTP流并录制为双轨PCM格式的WAV文件 一、RTP流与WAV文件格式二、实现步骤三、伪代码示例四、C语言示例代码五、关键点说明六、总结在Linux操作系统上,从媒体服务器(如Media Server,简称MS)获取RTP(Real-time Transport Protocol)流…