c语言中的类型转换
什么是类型转换
类型转换顾名思义,就是转换量的类型。在c语言中,我们在经常定义了一个int类型,即为整数型的变量,那么在输出int类型时我们根据生活中一些问题会发现它需要改为float类型,即为浮点型,否则他就会吞掉你的小数点后面的数字。例如:
1 | int a=5; |
那么我们得到的结果为
1 | 2 |
那么这里显然程序把我们本来有的2.5的.5吞了(这不明摆着抢劫嘛!!)。所以为了避免程序吞掉我们的东西,我们得提前给他转换类型来保护我们的财产。谨防程序盗贼!!
类型转换类型
在c语言中类型转换分为自动转换(隐式转换)和强制转换。
- 自动转换(隐式转换):即由编译系统自己完成的我转换,遵循一定规则。
- 强制转换:即根据自己需求清醒将数据转化为自己需要的类型。
首先我们看个隐式转换例子:
1 | //假定我们在买水果。 |
那么他们分别输出的是:
但是按照严格意义上来讲只有第三种是正确的,第二种不出所料地偷走了我们的小数点,第一种不是很规范。
接着我们看一个强制转换类型:
1 | //还是买水果 |
输出结果为
这里我们发现,输出结果为10,为什么不是12或者13呢。原因是,我们在price前面加上了(int)后首先会将2.5中的.5抹除(砍价党狂喜),然后再进行计算。
那么这里老板就不愿意了怎么办呢?接下来再看个例子:
1 | float price=2.5; |
输出结果为
这里我们发现原本12.5变成了12。老板给我门抹了个0(虽然没有上次优惠的多)。这里分析一下代码,程序首先将price *num计算完再进行的类型转换,导致12.5抹去了.5。所以说啊讲价前一定要讲单价(砍价党秘诀)。
类型转换规则
在类型转化中,我们可以用一个图来展示雷响转化的规则。
- 原则:占用内存字节数少(值域小)的类型,向占用内存字节数多(值域大)的类型转换,以保证精度不降低。
当然这句话反过来就印证了我们上面的情况,即占用字节多的向占用字节少的转换精度会降低,就出现了吞小数点的情况。
在类型转换中()称之为类型转换符,在一个变量前加上只对一个变量进行转换,如果是一个式子就要用括号括起来。原因是(的优先级为2级,比运算符的优先级要高,所以要用括号括起来)。
资料参考
b站的黑马程序员
评论










