类型转换

  语句和表达式通常应该只是用一种类型的变量和常量。如果混合使用类型,C会使用一个规则集合来自动完成类型转换。这可能很方便,但也很危险。类型转换的基本规则如下:

1、当出现在表达式里时,有符号和无符号的char和short类型都将自动被转换为int,在需要的情况下,将自动被转换为unsigned int(如果short与int有相同的大小,那么unsigned short比int大;在那种情况下,将把unsigned short转换为unsigned int)。

2、在包含两种类型的任何运算力,两个值都将被转换成两种类型里较高的级别。

3、类型级别从高到低的顺序是long double、double、float、unsigned long long、long long、unsigned long、long、unsigned int 和int。一个可能的例外是当long和int具有相同大小时,此时unsigned int 比long的级别更高。之所以short和char类型没有出现在此清单里,是因为它们已经被提升到了int或也能被提升到unsigned int。

4、在赋值语句中,计算的最后结果被转换成将要被赋予值得那个变量的类型。这个过程可能导致提升(promotion),也可能导致降级(demotion)。

5、当作为函数的参数被传递时,char和short会被转换成int,float会被转换为double。可以通过函数原型来阻止自动提升的发生。

 

  提升通常是一个平滑的无损害的过程,但是降级可能导致真正的问题。原因很简单:一个较低级别的类型可能不够大,不能存放一个完整的数。一个8字节的char可以存放整数101,但是不能存放整数22334.当把浮点类型降级为整数类型时,它们被趋零截尾或舍入。这意味着23.12和23.99都被结尾成23,-23.5被截尾成-23.

转载于:https://www.cnblogs.com/duanpengcheng/p/5337627.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值