C语言,自动类型转换怎么做?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言,自动类型转换怎么做?相关的知识,希望对你有一定的参考价值。
C语言数据类型转换自转换强制转换两类 自转换自转换发同数据类型量混合运算由编译系统自完自转换遵循规则: 1.若参与运算量类型同则先转换同类型进行运算 2.转换按数据度增加向进行保证精度降低int型long型运算先int量转long型再进行运算 3.所浮点运算都双精度进行即使仅含float单精度量运算表达式要先转换double型再作运算 4.char型short型参与运算必须先转换int型 5.赋值运算赋值号两边量数据类型同 赋值号右边量类型转换左边量类型 右边量数据类型度左边丢失部数据降低精度 丢失部按四舍五入向前舍入 强制类型转换 强制类型转换通类型转换运算实现其般形式: (类型说明符) (表达式) 其功能表达式运算结强制转换类型说明符所表示类型例: (float) a a转换实型(int)(x+y) x+y结转换整型使用 强制转换应注意问题: 1.类型说明符表达式都必须加括号(单变量加括号)(int)(x+y)写(int)x+y则x转换int型再与y相加 2.论强制转换或自转换都本运算需要变量数据度进行临性转换改变数据说明该变量定义类型 参考技术A c语言中的自动类型转换同一句语句或表达式如果使用了多种类型的变量和常量(类型混用),C 会自动把它们转换成同一种类型。以下是自动类型转换的基本规则:
1. 在表达式中,char 和 short 类型的值,无论有符号还是无符号,都会自动转换成 int 或者 unsigned int(如果 short 的大小和 int 一样,unsigned short 的表示范围就大于 int,在这种情况下,unsigned short 被转换成 unsigned int)。因为它们被转换成表示范围更大的类型,故而把这种转换称为 升级(promotion) 。
2. 按照从高到低的顺序给各种数据类型分等级,依次为:long double, double, float, unsigned long long, long long, unsigned long, long, unsigned int 和 int。这里有一个小小的例外,如果 long 和 int 大小相同,则 unsigned int 的等级应位于 long 之上。char 和 short 并没有出现于这个等级列表,是因为它们应该已经被升级成了 int 或者 unsigned int。
3. 在任何涉及两种数据类型的操作中,它们之间等级较低的类型会被转换成等级较高的类型。
4. 在赋值语句中,= 右边的值在赋予 = 左边的变量之前,首先要将右边的值的数据类型转换成左边变量的类型。也就是说,左边变量是什么数据类型,右边的值就要转换成什么数据类型的值。这个过程可能导致右边的值的类型升级,也可能导致其类型降级(demotion)。所谓 降级 ,是指等级较高的类型被转换成等级较低的类型。
5. 作为参数传递给函数时,char 和 short 会被转换成 int,float 会被转换成 double。使用函数原型可以避免这种自动升级。
C语言类型的自动转换时,啥类型能转换成啥类型呀?、嘿嘿,比如类型和decimal类型混合在一个表达
比如类型和decimal类型混合在一个表达式,不能自动提升为decimal??还有啊,字符常量必须用‘’吗??、(char)97 是吗??
1短的向长的转换;int a;short b; 计算a+b,先将b转为int,再做加法。2int,float向double转换;3+3.14 先将3转这double,再做加法。
3赋值时,左边向右边转换。int i=3.14;这个语句执行后,i的值为3。
4标C没有decimal类型,只有SQL Server才有这个类型。 参考技术A c里面我每见过decimal类型,只见过int型.
字符常量是放在两个单引号之间,字符串是放在两个双引号之间.
(char)97是可以的. 具体是哪个字符查ASCII表. 参考技术B 然后进行运算。
2)转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算。
3)所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算。
4)char型和short型参与运算时,必须先转换成int型。
5)在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。如果右边量的数据类型长度左边长时,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五入向前舍入。
以上是关于C语言,自动类型转换怎么做?的主要内容,如果未能解决你的问题,请参考以下文章