1.自动类型转换
一般来说,同一句语句或表达式应该使用同一种类型的变量和常量。如果使用了多种类型的变量和常量(类型混用),C语言会自动把它们转换成同一种类型。自动类型转换为我们写程序提供了方便,却也带来了危机。因粗心大意而造成的类型混用会导致程序运行出错。以下是自动类型转换的基本规则。
➢在表达式中,char和short类型的值,无论有符号还是无符号,都会自动转换成int或者unsigned int(如果short的大小和int一样,unsigned short可表示的最大值就大于int,在这种情况下,unsigned short被转换成unsigned int)。因为它们被转换成表示范围更大的类型,故而我们把这种转换称之为“升级(promotion)”。
➢按照从高到低的顺序给各种数据类型分等级,依次为:long double,double,float,long long,unsigned long,long,unsigned int和int。这里有一个小的例外,如果long和int大小相同,则unsigned int的等级应位于long之上。char和short并没有出现在这个等级列表中,是因为它们参与运算时已经被升级成了int或者unsigned int。
➢在任何涉及两种数据类型的操作中,它们之中等级较低的类型会被转换成等级较高的类型。
➢在赋值语句中,等号(=)右边的值在赋予等号(=)左边的变量之前,首先要将右边的值的数据类型转换成左边变量的类型。也就是说,左边变量是什么数据类型,右边的值就要转换成什么数据类型的值。这个过程可能会导致右边的值的类型升级,也可能会导致其类型降级(demotion)。所谓“降级”,是指等级较高的类型被转换成等级较低的类型。
➢作为参数传递给函数时,char和short会被转换成int,float会被转换成double。使用函数原型可以避免这种自动升级。类型升级通常不会有什么问题,但是类型降级却会带来不少问题。
例如:
整型常量1222降级为char类型,但char无法表示1222。再如:
22.2降级为int,小数部分被截断。
2.类型转换运算符(强制类型转换)
使用类型转换运算符可以指定我们想要进行的类型转换。类型转换运算符由括号和类型名组成:
其中,我们应该用我们想转换成的类型替换掉type,例如:(long),(unsigned long)。类型转换运算符应该放在值的前面:
浮点型1.1在加法运算前就因为类型转换运算符而降级为int,其值变为1。类似2.2也降级为int,其值变为2。又如:
j的值被转换成double,然后用于初始化k。
本章主要学习了以下内容:
➢在C语言中的运算符:算术运算符、关系运算符、逻辑运算符、赋值运算符、条件运算符、逗号运算符、特殊运算符等几种。
➢运算符的优先级
➢类型转换:自动类型转换与强制类型转换(www.xing528.com)
1.在银行中存储1000元钱,银行一年的利息是5%,输出存一年后的钱是多少。运行效果如图3.11所示。
图3.11 输出总金额
2.为抵抗洪水,解放军战士连续作战89小时,编程计算共多少天多少小时。运行效果如图3.12所示。
图3.12 输出时间
3.根据下面的商品信息,计算客户的消费金额。
运行效果,如图3.13所示。
图3.13 输出消费金额
4.张三(享受8折)的购物信息如下所示,结算时支付1200元。
计算消费总额并打印购物小票,并计算此次购物获得的会员积分(每消费100元可获得3分)。运行效果,如图3.14所示。
图3.14 打印购物小票
5.银行提供了整存整取定期储蓄业务,其存期分为一年、两年、三年、五年,到期凭存单支取本息,年利率如下所示。现存入银行10000元,编写一个程序,计算假设存一年、两年、三年或五年,到期取款时,银行应支付的本息分别是多少。运行效果如图3.15所示。
图3.15 输出本息
1.接收用户输入的一个5位数,求个位数、十位数、百位数、千位数、万位数的和。运行效果如图3.16所示。
图3.16 求各位数之和
2.接收用户输入的一个大写字母,以小写字母的形式输出。运行效果如图3.17所示。
图3.17 将大写字母转换成小写字母
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。