首页 理论教育 C语言程序设计:类型转换的危机与方便

C语言程序设计:类型转换的危机与方便

时间:2023-10-26 理论教育 版权反馈
【摘要】:自动类型转换为我们写程序提供了方便,却也带来了危机。所谓“降级”,是指等级较高的类型被转换成等级较低的类型。类型转换运算符应该放在值的前面:浮点型1.1在加法运算前就因为类型转换运算符而降级为int,其值变为1。图3.17将大写字母转换成小写字母

C语言程序设计:类型转换的危机与方便

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。

img

本章主要学习了以下内容:

➢在C语言中的运算符:算术运算符、关系运算符、逻辑运算符、赋值运算符、条件运算符、逗号运算符、特殊运算符等几种。

➢运算符的优先级

➢类型转换:自动类型转换与强制类型转换(www.xing528.com)

img

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 输出本息

img

1.接收用户输入的一个5位数,求个位数、十位数、百位数、千位数、万位数的和。运行效果如图3.16所示。

图3.16 求各位数之和

2.接收用户输入的一个大写字母,以小写字母的形式输出。运行效果如图3.17所示。

图3.17 将大写字母转换成小写字母

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈