c++的,关于类型转换。

char到int是整型提升。char到double是标准转化。但为啥char到double优先级会比char到unsignedchar的高。标准转化里还分类型提升?还有类... char到int是整型提升。char到double是标准转化。但为啥char到double优先级会比char到unsigned char的高。标准转化里还分类型提升?
还有类型提升就是整型提升?如果不是,那为啥int到double不是类型提升?
展开
 我来答
鎏金阁
2013-06-12 · TA获得超过580个赞
知道小有建树答主
回答量:483
采纳率:80%
帮助的人:355万
展开全部
决定类型的根本原因是存放该类型数据的存储空间大小。
字符类型char或unsigned char;整型类型int或unsigned int或long或unsigned long都是按位权编码的,即,有符号数据的首位代表符号,其余(包括无符号数据)每位表示的数值都是固定的。
而float或double是浮点表示的数据。单精度浮点型float需要4字节的存储空间,可表示数据范围是±(3.4E-38~3.4E38),称之为该数据类型的值域;双精度符点型double需要8字节的存储空间,可表示数据范围(值域)是±(1.7E-308~1.7E308)。但要清楚:32个二进制位或64个二进制位的组合状态数是一个确定值,远小于浮点数据的可表示数据范围内可能取值的点数(这段范围内数轴上可能的取值点数),理论上是无限个值。所以,实数在内存中以规范化的浮点数存放,包括数符、阶码、尾数。数的精度取决于尾数,同一个运算表达式,采用不同的运算顺序,就可能产生误差。
当两个不同类型的数据参与同一个运算时,为了尽可能获得精确的数据结果,就需要进行类型转换。因为C语言编译程序不能预测实际可能的运算对象取值,C语言编译程序默认总是把数据表示范围小的数据转换为数据表示范围大的,于是就有了上述的类型提升与转换的概念。
实际编程时,需要编程者自己估计运算对象可能的取值范围,选择运算误差最小的数据表示方法和运算步骤。采取的手段就是强制类型转换,即明确告诉C语言编译程序,采用什么类型的存储空间。注意:有时候,把大值域强制类型转换为小值域更合适。
提示:强制类型转换是指示C语言编译程序如何分配存储空间,是在程序编译阶段完成的,不影响程序实际运行步骤。(严格地说,对程序运行略微有一点影响,例如:在32位操作系统中,访问64位数据就需要两次。)
结语:类型提升与转换是手段,目的是为了运算结果,学习时只要明确运算精度的概念即可,没有必要去深究C语言编译程序默认的类型提升与转换概念。编程时明确使用合适的指定类型,混合类型运算时,强制类型转换。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式