meo学习笔记5:C++中的类型转换概述
C++中类型转换概述(待更新…)
1. 前言
在C++中某些类型存在关联,有时我们可能需要用一种类型来替代另一种类型,此时就需要类型转换,类型转换一般可分为隐式类型转换(编译器自动进转换)和强制/显示类型转换(开发者手动进行),以下将针对这里两种类型做一个大致的介绍。
注:本文类容大部分来源于《C++ primer》一书
2. 直奔主题
2.1 隐式类型转换
隐式类型转换包括算数类型转换,和其他的隐式转换;
比如:这个我们平时用得比较多,或是说经常考的比较多,比如int r = 5.02 + 4
的结果为9就是进行的隐式转换, 先将4转换为double再和5.02相加,最后将结果9.02初始化int r,使double又转换为了int。
2.1.1 算数转换
概念上讲:将一种算数类型转换为另一种算数类型。转换大致都是按照最近最大原则,就是旁边谁能存得数值范围更大就向谁转换。
(1)整型提升
我们知道内置的算数类型分为两类,整型和浮点型,整型提升就会将较小的整数类型提升成为较大的整数类型:
char、signed char、unsigned char、short、unsigned short →→提升为→→
int 或 unsinged int
wchar_t、char16_t、char32_t→→提升为→→
int或unsinged int 或 long 或 unsigned long 或 long long 或 unsigned long long
(之所以会”或”是根据具体转换后的类型是否能存下转换前的全部数值范围)
(2)无符号类型转换
比如有两个运算对象,un_a和a,其中un_a为无符号类型,a为带符号类型。
un_a的类型不小于a :则a将转换为un_a的类型,但是如果a正好是个负数,那么将产生一些副作用,比如说int 会转换为 unsigned int ,int如果是正数那么相安无事,但是如果是负数,则出现问题(所以切勿混用带符号类型和无符号类型)。
un_a的类型小于a :转换依赖于机器,如果无符号类型的值都能存在于带符号类型则就转换为带符号类型,如果不能则都转换为无符号类型。eg,long 和 unsigned int,假设机器中int 和long大小一致,则long 转换为 unsigned int(大小一致时向无符号转换), 但如果机器的long 比int 大,则unsigned int将转为long(向大的转)
(3)总结基本规则
运算对象不一致时,转换为同一种类型。如果是整数,先进行整型提升,提升后发现两个符号类型不一致,则进行符号类型转换,转换的原则是大小一致的,有符号向为无符号转换(注意负数将出现异常),大小不一致的,类型小的向类型大的转换。
(4)例子
(源于书籍)
int main()
{bool flag = 0; char cval = 'a';short sval = -1; unsigned short usval = 1;int ival = -1; unsigned int uival = 1;long lval = -1; unsigned long ulval = 1;float fval = 1.0; double dval = 1.0;cout << typeid(3.14L + 'a').name() << endl; // 'a'提升为int, int再转换为long doublecout << typeid(dval + ival).name() << endl; // ival转换为doublecout << typeid(dval + fval).name() << endl; // fval转换为doublecout << typeid(ival = dval).name() << endl; // dval 转换为intcout << typeid(flag = dval).name() << endl; // 如果 dval 是 0,则 flag 是 false,否则 flag 是 truecout << typeid(sval + cval).name() << endl; // sval和cval都提升成intcout << typeid(cval + lval).name() << endl; // cval 转换成 longcout << typeid(ival + ulval).name() << endl; // iva丄转换成 unsigned longcout << typeid(usval + ival).name() << endl; // 根据unsigned short和int所占空间的大小进行提升cout << typeid(uival + lval).name() << endl; // 根据unsigned int和long所占空间的大小进行转换system("pause");return 0;
}
2.1.2 其他隐式转换
待续。。。。
此时我只是一个书籍搬运工
meo学习笔记5:C++中的类型转换概述相关推荐
- SpringBoot学习笔记(4)----SpringBoot中freemarker、thymeleaf的使用
1. freemarker引擎的使用 如果你使用的是idea或者eclipse中安装了sts插件,那么在新建项目时就可以直接指定试图模板 如图: 勾选freeMarker,此时springboot项目 ...
- Hadoop学习笔记—11.MapReduce中的排序和分组
Hadoop学习笔记-11.MapReduce中的排序和分组 一.写在之前的 1.1 回顾Map阶段四大步骤 首先,我们回顾一下在MapReduce中,排序和分组在哪里被执行: 从上图中可以清楚地看出 ...
- 【theano-windows】学习笔记十七——梯度中的consider_constant
前言 主要是在写玻尔兹曼机相关的theano时, 在计算梯度grad的时候发现一个参数名字叫做consider_constant,来看看这个到底做了什么事情 参考博客: using consider_ ...
- 【theano-windows】学习笔记十一——theano中与神经网络相关函数
前言 经过softmax和MLP的学习, 我们发现thenao.tensor中除了之前的博客[theano-windows]学习笔记五--theano中张量部分函数提到的张量的定义和基本运算外, 还有 ...
- 【theano-windows】学习笔记六——theano中的循环函数scan
前言 Scan是Theano中最基础的循环函数, 官方教程主要是通过大量的例子来说明用法. 不过在学习的时候我比较习惯先看看用途, 然后是参数说明, 最后再是研究实例. 国际惯例, 参考网址 官网关于 ...
- SpringBoot学习笔记(9)----SpringBoot中使用关系型数据库以及事务处理
在实际的运用开发中,跟数据库之间的交互是必不可少的,SpringBoot也提供了两种跟数据库交互的方式. 1. 使用JdbcTemplate 在SpringBoot中提供了JdbcTemplate模板 ...
- cockroachdb mysql_CockroachDB学习笔记——[译]CockroachDB中的SQL:映射表中数据到键值存储...
CockroachDB学习笔记--[译]CockroachDB中的SQL:映射表中数据到键值存储 原文标题:SQL in CockroachDB: Mapping Table Data to Key- ...
- vue文件里在style的样式需要什么loader_Vue学习笔记之Webpack中css、less、图片等文件处理...
一.webpack中使用css文件: loader是webpack中一个非常核心的概念,去转化webpack不能转化或打包的文件. 安装loader: 官网介绍: 安装: cnpm install - ...
- ASP.Net学习笔记015--ASP.Net中使用Cookie
ASP.Net学习笔记015--ASP.Net中使用Cookie 表单数据欺骗: 原理跟收到欺骗短信一样,移动信号塔[基站],伪装的移动信号塔会屏蔽移动信号,并且 在信号范围内的手机会自动切换为接收伪 ...
- Java学习笔记1:Java中有关print、println、printf的用法和区别
Java学习笔记1:Java中有关print.println.printf的用法和区别 最近在学习java,写一些笔记记录下. 1.print()函数是一般的标准输出,但是不换行. 2.println ...
最新文章
- 数据结构:字典树的基本使用
- 我的数据分析全系列教程,记录着那些大学奋斗的时光
- C# 2.0中泛型编程初级入门教程
- Firefox年内将默认启用AV1解码
- MySQL set names 命令_mysql set names 命令和 mysql 字符编码问题
- chrome浏览器的跨域设置,前端修改跨域问题
- 华硕z170a如何开启m2_跑得快也要站得稳,华硕灵珑II笔记本保护你的数据安全
- UVa 10935 - Throwing cards away I
- 杜克大学中国女博士7年奋斗历程
- elasticsearch两年学习资料整理分享
- ONLYOFFICE权限开发之二
- Win11系统输入法无法调出问题解决方法
- Intelligent Parking Building
- 邻域、邻接、通路、连通、连通集、区域概念区分​​​​​​​
- MicroLab专业的嵌入式开发调试工具集免费试用
- json转换工具Fastjson
- 数据分析:Day01软件安装及基础
- 基于小波变换的EMG信号病人数据matlab仿真分析
- vray 用于室内渲染的10大技巧,看进来!
- ArcGIS中建筑物图形简化工具和建筑物群聚合工具的应用