点击上方蓝字关注我,了解更多咨询
1.不同类型数据间的混合运算与类型转换:
①若参与运算量的类型不同,则先转换成同一类型,然后进行运算
②转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算
a、若两种类型的字节数不同,转换成字节数高的类型
b、若两种类型的字节数相同,且一种有符号,一种无符号,则转换成无符号类型
③所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算
④char型和short型参与运算时,必须先转换成int型
⑤在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。如果右边量的数据类型长度左边长时,将丢失一部分数据
2.C语言转换规则:
(1)整数和浮点型:
浮点型转换成整型时,小数部分被省略,如果其值不能被整型表示,则其行为未定义。注意:将负的浮点型转换成unsigned int 结果是没有定义的。
当把整型转换成浮点型时,如果该值是在可表示范围内,则结果可能是下一个较高或者较低的可表示值。如果结果在范围外,则行为未定义。
(2)浮点型:
将较低精读浮点型转换成较高浮点型时:值不变。
将较高精度转换成较低精度时:在范围内,值不变,在范围外,结果为定义
(3)整型提升:
如果原始类型都可以用int表示,则将其转换成int,否则被转换成unsigned int
(4)整型转换:
将unsigned 转换成 signed 时,如果可以在新类型表示,则表示,如果不能表示,结果与具体实现有关,将signed 转换成unsigned时,若unsigned位数窄,对二进制补码进行左截取,若unsigned宽,对signed进行符号扩展。
(5)指针和整数:
指针可加上或着减去一个整数,转换规则按照加法运算符号方式进行,两个指向同一数组的指针可进行加减运算,方式按照算数转换规则,值为0的整型常量或者void*型表达式可转换成任意类型的指针,指针可以转换成整型,注意整型必须足够大,整型对象可以转换成指针,一般用于将一个足够宽的从指针转换来的整型转换成(恢复)指针,不同类型的指针间可以相互转换,但必须满足内存对齐条件,一个指针可以转换成同意类型的另一个指针,但是可以增加或者删除另一个指针的限制符,如果和另一个指针,增加了相同的修饰符,则和另一个指针一样,如果删除了修饰符,则底层对象的运算仍受到原声明的限制。
END
*声明:本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。
戳“阅读原文”我们一起进步