Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C++类型转换

C++类型转换

作者头像
用户7272142
发布于 2023-10-11 13:16:00
发布于 2023-10-11 13:16:00
30200
代码可运行
举报
文章被收录于专栏:Republic博客Republic博客
运行总次数:0
代码可运行

因为需求不同我们可以选择不同的类型,我们在计算不同类型的数据时,需要用到类型转换。

将一种算数类型的值赋给另一种算数类型的变量时,C++++将进行转换

表达式中包含不同类型时

将参数传递给函数时 程序自己进行的转化叫自动转换,如果不理解这些转换,有些结果是无法理解的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
long l_long;
short s_short;
l_long = s_short;

我是win10 64位 所以short需要接受long的数据,则自身16位需要扩展为32位,会得到一个新值,而s_short的内容不变。将一个值赋值给取值范围更大的类型不会导致什么问题,例如把short的值赋值给long,并没有改变这个值,而是占用了更大的空间而已。如果将一个很大的值long赋值给float将会降低精度,因为只能最低保证六位有效位,所以会得到一个四舍五入的值。 转换存在的问题

转换

潜在的问题

double->float

数据有效位降低,结果不确定

float->int

小数部分丢失,结果不确定

long->short

原来的值可能超出目标类型,一般只复制右边的字节(低字节)

{}方式进行初始化转换

与上面的初始化相比,{}有更严格的转换要求。列表初始化不允许缩窄,即变量的类型可能无法表示赋给他的值;例如不允许将浮点型转换为整型。允许的条件是编译器知道目标变量可以存储赋给的值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<iostream>
using namespace std;
int main()
{
  const int code = 66;
  int x = 66;
  char c1{ 31325 };//超出范围
  char c2={ 66 };
  char c3{ code };
  char c4 = { x };
  x = 31325;
  char c5 = x;
}

c4初始化时,编译器并不会通过,因为在编译器看来,x是一个变量,他并不知道变量的大小,因此不可以转换。

表达式转换

当一个表达式出现两种不同的算数类型时,一些类型会出现时自当转换,其次,有些类型在与其他类型出现在表达式里面会被转换。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
short chicken = 20;
short ducks = 35;
short fowl = chicken+ducks;

转换过程为,先把chicken和ducks转换成int 然后相加结果再转换为short,因为int是计算机最自然的类型,如果short比int短,则unsigned类型将被转换为int 如果长度相等,则unsigned short类型被转换为unsigned int,确保了数据转换时,不会丢失数据。 不同数据类型尽心运算时候,也会进行一些转换,例如将int和float相加时,当涉及两种类型时,较小的类型会被转为较大的类型 VS2019的C++语言标准默认为C++14。 这里总结一下C++自动转换的规则

转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算。也是小转大 a、若两种类型的字节数不同,转换成字节数高的类型 b、若两种类型的字节数相同,且一种有符号,一种无符号,则转换成无符号类型

char型和short型参与运算时,必须先转换成int型。

在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型

如果右边量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度

强制转换

C语言转换(typename) value C++转换 typename (name) 强制类型转换不会改变转换变量本身,而是根据转换类型创建一个新的值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char q = 'q';
cout<<(int)q

q将会输出q对应的ascii码 我们可以通过程序演示一下强制转换。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<iostream>
int main()
{
  using namespace std;
  int auks, bats, coots;
  auks = 19.99 + 11.99;
  bats = int(19.99) + int(11.99);
  coots = (int)19.99 + (int)11.99;

  cout << "auks = " << auks
      << "bats = " << bats
      << "coots = " << coots << endl;
  char ch = 'Z';
  cout << "the code for" << ch << "is";
  cout << int(ch) << endl;
  cout << "the code is ";
  cout << static_cast<int>(ch) << endl;
  return 0;
}

首先,将19.99和11.99相加,结果为31.98。这个值赋给int变量auks时,被截短为31。如果是强转的话,两个值分别被截短为19和11.同样的字符也是转为整数,打印存储在ch中的Ascii码。

auto

这个关键词可以让编译器根据初始值的类型推断变量的类型。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
auto n = 100;//int
auto x = 1.5;//double
auto y = 1.3e12L;//long double

但是这个关键词在创建基本简单情况时,会很容易出。auto x = 0;如果我们需要一个double 而编译器会认为他是一个int类型。

总结

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-09-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
EasyC++08,C++算术运算符与类型转换
对于除法来说,我们要注意的是它是区分类型的。当我们的除数和被除数都是整数的时候,得到的结果也会是一个整数。所以10 ➗ 3得到的结果就是3,它的小数部分会被抛弃。想要得到小数结果,只需要除数或者被除数当中有一个是浮点型即可。
TechFlow-承志
2022/08/26
4030
EasyC++08,C++算术运算符与类型转换
C++类型转换几种情况
1.将较大的浮点型转换为较小的浮点类型,精度降低(如果对精度不理解请看我的C++第一篇),值可能会超出目标类型的取值范围,这种情况下的值是不确定的。
花狗Fdog
2020/10/28
2.3K0
C++类型转换几种情况
Java类型转换基本规则
1、基本数据类型的转换是指由系统根据转换规则自动完成,不需要程序员明确地声明不同数据类型之间的转换。转换在编译器执行,而不是等到运行期再执行。
用户7886150
2021/04/27
1.1K0
Java 数据类型详解与类型转换技巧
基本数据类型指定变量值的大小和类型,它没有额外的方法。在 Java 中有八种基本数据类型:
小万哥
2024/02/03
1930
Java 数据类型详解与类型转换技巧
【计算机本科补全计划】《C++ Primer》:类型转换
正文之前 学习,不如爆文?反正晚上也不会学习,某个家伙也对我爱理不理的!!!!(这才是最骚的吧),刚好欠了 C++ Primer太多烂账了。不如赶紧还了! 对了 Primer是初级,入门的意思哦~~是
用户1687088
2018/05/07
7020
【计算机本科补全计划】《C++ Primer》:类型转换
【Java探索之旅】解密Java中的类型转换与类型提升
Java 作为一个强类型编程语言, 当不同类型之间的变量相互赋值的时候, 会有教严格的校验
屿小夏
2024/03/16
2280
『C++』我想学C++,C++太难了,那我想入门,给我10分钟我带你入门
就是一条预处理命令, 它的作用是通知C++编译系统在对C++程序进行正式编译之前需做一些预处理工作,导入头文件下的函数,与类。
风骨散人Chiam
2020/10/28
1.7K0
C语言进阶指南(7)(类型转换、整型提升)
我们前面已经了解了浮点数和整数的存储形式是完全不一样的,但是在C语言中是可以用int类型的数据接收到float类型的数据的(会发生精度丢失)
代码小豪
2024/06/08
2440
C++ Primer Plus 第03章 数据处理 学习笔记
✅ 小Tips:变量名建议使用 驼峰式 的格式。例如:myEyeTooth 或 my_eyes。
阳光罗诺
2021/07/21
9240
C++ Primer Plus 第03章 数据处理 学习笔记
【揭秘】C语言类型转换时发生了什么?
在C语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统,我们常用的算术类型包括两种类型:整数类型和浮点类型。那么相互之间具体是怎么转化的呢?
李肖遥
2020/07/21
1.3K0
【揭秘】C语言类型转换时发生了什么?
C/C++ sizeof(上)
sizeof是C/C++中的一个操作符(operator),其作用是返回一个对象或者类型所占的内存字节数,使用频繁,有必须对其有个全面的了解。
恋喵大鲤鱼
2018/08/03
9930
C++学习——数据类型(强制)转换详解
如果将一个浮点值分配给一个 int 整型变量,该变量会接收什么值?如果一个 int 整数乘以一个 float 浮点数,结果将会是什么数据类型?如果一个 double 浮点数除以一个 unsigned int 无符号整数会怎么样?是否有办法预测在这些情况下会发生什么?
全栈程序员站长
2022/09/23
2K0
C/C++面试必备知识
“filename.h”是从本项目里搜索filename.h,<filename.h> 是从标准库里搜索filename.h文件
跋扈洋
2023/09/02
2720
C/C++面试必备知识
【C数据(一)】数据类型和变量你真的理解了吗?来看看这篇
C语⾔其实原来并没有为布尔值单独设置⼀个类型,⽽是使⽤整数0在 表示假,非零表示真。在C99中也引⼊了布尔类型,是专⻔表⽰真假的。 布尔类型的使⽤得包含头⽂件 <stdbool.h> 布尔类型变量的取值是:true或者false.
学习起来吧
2024/02/29
1.3K0
【C数据(一)】数据类型和变量你真的理解了吗?来看看这篇
【Java】数据类型与变量详解!!!
其中8bit=1Byte 1KB=1024Byte 1MB=1024KB 1GB=1024MB
喜欢做梦
2024/11/25
1450
【Java】数据类型与变量详解!!!
C++基础篇之什么是数据类型
使用编程语言进行编程时,需要用到各种变量来存储各种信息。变量保留的是它所存储的值的内存位置。这意味着,当您创建一个变量时,就会在内存中保留一些空间。
iOS程序应用
2023/01/03
2480
《JavaSE-第二章》之基本数据类型与类型转换
java语言有三种输出方式,第一种是打印不换行,第二种是打印并换行,第三种是格式化输出。
用户10517932
2023/10/07
2500
《JavaSE-第二章》之基本数据类型与类型转换
C语言的数据类型和变量-学习笔记
今天上课时,老师和我们说学习编程和代码是为了解决未来生活中的问题,写出的代码是为了能够描述现实世界。欧克,接下来将和大家一起学习C语言相关知识。希望对大家能够有所帮助!!!
LonlyMay
2024/10/21
1020
C语言的数据类型和变量-学习笔记
C# 数据类型与类型转换:包含教程与示例
使用正确的数据类型对应于相应的变量是重要的;这样可以避免错误、节省时间和内存,还会使您的代码更易于维护和阅读。最常见的数据类型有:
小万哥
2024/01/18
3160
C# 数据类型与类型转换:包含教程与示例
【C语言】数据类型(基本类型、构造类型、类型转换)
不包含小数部分的数据都成为整型数据。在C语言中,根据数值的取值范围,可以将整型分为短整型(short int)、基本整型(int)、长整型(long int)。整型数据可以被修饰符signed和unsigned修饰,其中,被signed修饰的整型称为有符号的整型,被unsigned修饰的整型称为无符号的整型。 字节(Byte)是计算机存储空间的一种单位,它是内存分配空间的一个基础单位,即内存分配空间至少是1个字节。 最小的存储单位——位(bit),是一个二进制数字0或1占一位。 1B=8bit;
颜颜yan_
2023/01/10
2.6K0
【C语言】数据类型(基本类型、构造类型、类型转换)
推荐阅读
相关推荐
EasyC++08,C++算术运算符与类型转换
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验