首页 / 更多教程 / 7.4.4强制类型转换
7.4.4强制类型转换
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了7.4.4强制类型转换,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2138字,纯文字阅读大概需要4分钟。
内容图文
虽然C语言的隐式转换使用起来非常方便,但我们有些时候还需要从更大程度上控制类型转换。基于这种原因,C语言提供了强制类型转换。强制类型转换表达式的格式如下: 【强制转换表达式】(类型名)表达式 这里的类型名表示的是表达式应该转换成类型。 下面的例子显示了使用强制类型转换表达式计算float类型值小数部分的方法: float f, frac_part: frac_part = f - (int) f; 强制类型转换表达式(int)f 表示把 f 的值转换成int类型的结果。C语言的常用算术转换则要求在进行减法运算前把(int)f 转换回 float 类型。 f 和(int) f 的不同之处就在于 f 的小数部分, 这部分在强制类型转换时被丢掉了。 强制类型转换表达式可以用于显示那些肯定会发生的类型转换: i = (int) f ; 它也可以用来控制编译器并且强制它进行我们需要的转换。思考下面的例子: flaot quotient; int dividend, divisor; quotient = dividend / divisor; 正如现在写的那样,除法的结果是一个整数,在把结果存储在quotient 的变量中之前,要把结果存储在quotient变量中之前,要把结果转换成float格式。但是,为了得到更精确的结果,可能需要再除法执行之前把dividend和divisor的类型转换成float格式的。强制类型转换表达式可以完成这一点: quotient = (float) dividend / divisor; 变量divisor不需要进行强制类型转换,因为把变量dividend强制转换成flaot类型会迫使编译器把divisor也转换成float类型。 顺便提一下,C语言把(类型名)视为一元运算符。 一元运算符的优先级高级二元运算符,所以编译器会把表达式 (float) dividend / divisor 解释为 ((float) dividend) / divisor 如果感觉有点混淆,那么注意还有其他方法可以实现同样的效果: quotient = dividend / (float) divisor; 或者 quotient = (float) dividend / (float) divisor; 有些时候,需要使用强制类型转换来避免溢出。思考下面例子; long i; int j = 1000; i = j * j; /*overfloaw may occur*/ 乍看之下,这条语句没有问题。表达式j * j 的值是1000000, 并且变量 i 是long int类型的,所以 i 应该能很容易地存储这种大小的值,不是吗?问题是,当两个int类型值相乘时,结果也应该是int 类型的,但是j * j 的结果太大,以致在某些机器上无法表示成int 型,从而导致溢出。幸运的是,可以使用强制类型转换避免这种问题的发生: i = (long)j * j; 因为强制运算符的优先级高于*,所以第一个变量j 会被转换成long int 类型,同时也迫使第二个j 进行转换。注意,语句 i=(long)(j*j); 是不对的,因为溢出在强制类型转换之前就已经发生了。 |
|
内容总结
以上是互联网集市为您收集整理的7.4.4强制类型转换全部内容,希望文章能够帮你解决7.4.4强制类型转换所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。