C++类型转换问题系统学习-创新互联
写在前面
- 面向初学者撰写专栏,个人原创的学习C/C++笔记(干货)
- 所作源代码输出内容为中文,便于理解
- 如有错误之处请各位读者指正
- 请读者评论回复、参与投票,反馈给作者,我会获得持续更新笔记干货的动力。
致粉丝:可以在阅读完我的文章后,自己尝试写一点原创心得(哪怕一行字也好)。
创新互联建站是一家专注于做网站、网站建设与策划设计,桐乡网站建设哪家好?创新互联建站做网站,专注于网站建设10多年,网设计领域的专业建站公司;建站业务涵盖:桐乡等地区。桐乡做网站价格咨询:028-86922220
希望众(尽管400个🤣)粉丝多多支持、浏览、自我创作@_@
知识点概览一.为什么进行类型转换 1.C++数值类型丰富写在前面
知识点概览
一.为什么进行类型转换
1.C++数值类型丰富
2.计算机需要处理特殊类型情况
二.类型转换的一些基本规则
1.初始化数值与赋值时进行转换
2.表达式内的类型转换
3.类型级别塔(高到低):
4.(C++11新特性)以花括号{}方式初始化进行转换
5.传递函数参数时的类型转换
6.强制类型转换
结语
- C++拥有丰富的类型,在编译程序时根据不同的类型需求选择适当类型
- 不同种数值类型运算时,计算机的编译指令与内容会有不同
- 在此链接文章:学习C++基本数值类型
- 例如:在 short 整型1和 short 型1相加时的编译指令与 int 整型300和 int 型300相加可能不同
- 处理一组同类型的数值与另一组同类型的数值计算
- 处理不同类型的多个数值混杂计算
- 一种类型的值给另一种类型的值赋值
- 处理参数(一般情况下是实参)数值传递给函数
- 在此链接文章: 简洁易懂地介绍C++参数
long l_Big = 300;
short s_small = l_Big;
如上面的例子
- 把long类型的变量l_Big初始化为300;
- 把long类型变量l_Big的值赋给较短的short类型变量s_small。
- 本例可能运行时不会出大问题。但是当l_Big数值大到超过short类型取值范围时,会出现未知的错误(例如,数值的上溢和下溢)
- 把一个小类型数值赋给较大类型数值一般不会出问题,只会在内存里占用更多的字节。
- 下表列出了一些类型转换可能出现的问题:
类型转换 | 示例 | 可能出现的问题 |
较大整型-->较小整型 | long转short | 原较大值超过小类型取值范围 |
浮点类型-->整型 | double转int | 原小数部分被丢弃,也可能超过后者的取值范围 |
较大浮点型-->较小浮点型 | double转float | 精度降低(有效数位减少),或超出后者取值范围 |
注意:浮点类型转换为整型时,直接丢弃小数部分,而不是四舍五入保留整数部分
2.表达式内的类型转换注意:bool类型变量,只有数值0赋给bool类型会转换为false(假),其他任意类型非零数值都会转换成true(真)。
1.整型提升:
- 计算表达式时,将如下几种类型转换为int类型(因为计算机处理最快的类型是int)
bool,char,unsigned char,signed char,short等
计算结束转换回去 - 其他类型,如short和unsigned short
- 如果short比int短,unsigned short转为int
- 如果short和int一样长,unsigned short转为unsigned int
2.两种或多种类型混合时,多采取“小类型转换为大类型”。
3.校验表(C++11标准):
3.类型级别塔(高到低):
- 如一个操作数类型是long double,则将另一个操作数转换为long double
- 否则,如一个操作数类型是double,则将另一个操作数转换为double
- 否则,如一个操作数类型是double,则将另一个操作数转换为double
- 否则,两个操作数都不是浮点数,都将会执行整型提升
- 此情况下若两个操作数都是有或无符号的类型,低级别操作数转高级别类型
- 操作数中一个有符号类型,另一个无符号类型且级别较高,则有符号类型转为该无符号类型
- 否则,若有符号类型可以表示无符号类型所有取值,则将无符号操作数转为有符号所属类型
- 否则,将两个操作数都转为有符号类型的无符号版本
有符号整型类 | 其他类型 |
(注:无符号整型类同有符号整型类) | (空) |
long long | (空) |
long | (空) |
int | (空) |
short | (空) |
signed char | char,signed char,unsigned char同级 |
(空) | wchar_t,char16_t,char_32_t与其底层类型相同 |
(空) | bool最低 |
1.也称作列表初始化,常用于给复杂数据类型提供值列表,要求更严格,不允许缩窄,可能不能用小类型表示大类型数值,且不允许将浮点型转换为整型。
2.只要类型长度足够,就可以进行初始化类型转换
5.传递函数参数时的类型转换- 通常收函数原型控制,也可以取消这种控制,但不推荐
- 传递时一般将float转换为double
- 为了便于程序员在让数值存储为一种类型时,可让它计算得到其他类型值,但不改变原值
- 达到对一种值能够满足不同需求
- 两种基本强制类型转换符:注意:变量名必须已声明并赋值
(括号里放类型名)变量名或数值//方法一
变量名或数值(括号里放类型名)//方法二
static——cast<类型名>(变量或数值)
结语
今天我们共同学习了:C++类型转换的原因与基本规则,涉及初始化数值/表达式内的/列表初始化的/传递参数时的/强制类型转换,以及数值级别塔 等重要知识。
学编程是一条漫长的路,贵在坚持。每天学习来提升自己的的编程能力,成为耀眼的IT之星。
各位读者跟随我的脚步,我们共同努力,共同进步吧!
返回作者主页
专栏下一篇文档:学习C++基本数值类型
其它文章:C++学习/温习笔记:源码学编程(一)(优秀博文)
C语言求幂运算(尽大支持)——中文式奇特命名
简洁易懂地介绍C++参数
C/C++基础运算符
如有探讨问题联系邮箱:yhlz0613@163.com
对于文章中的错误请各位批评指正,我一定及时更正
请在投票后评论回复意见,如有关于写博文的指导也请您回复提出
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
网站标题:C++类型转换问题系统学习-创新互联
本文链接:http://azwzsj.com/article/dhjgdg.html