(24)强制类型转换

本文介绍了C语言中强制类型转换在整数除法中的应用,以及整数提升的概念。通过示例展示了当整数与字符进行运算时,如何自动转换为整数并进行加法操作。同时,讨论了不同数据类型运算时的转换规则,并提到了printf和scanf函数在输出和输入浮点数时的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

请看下面的实例,使用强制类型转换运算符把一个整数变量除以另一个整数变量,得到一个浮点数:

#include <stdio.h>
 
int main()
{
   int sum = 17, count = 5;
   double mean;
 
   mean = (double) sum / count;
   printf("Value of mean : %f\n", mean );
 
}

结果:

Value of mean : 3.400000

这里要注意的是强制类型转换运算符的优先级大于除法,因此 sum 的值首先被转换为 double 型,然后除以 count,得到一个类型为 double 的值。

整数提升

#include <stdio.h>
 
int main()
{
   int  i = 17;
   char c = 'c'; /* ascii 值是 99 */
   int sum;
 
   sum = i + c;
   printf("Value of sum : %d\n", sum );
 
}

结果:

Value of sum : 116

在这里,sum 的值为 116,因为编译器进行了整数提升,在执行实际加法运算时,把 ‘c’ 的值转换为对应的 ascii 值。

#include <stdio.h>
 
int main()
{
   int  i = 17;
   char c = 'c'; /* ascii 值是 99 */
   float sum;
 
   sum = i + c;
   printf("Value of sum : %f\n", sum );
 
}

结果:

Value of sum : 116.000000

在这里,c 首先被转换为整数,但是由于最后的值是 float 型的,所以会应用常用的算术转换,编译器会把 i 和 c 转换为浮点型,并把它们相加得到一个浮点数。

如果一个运算符两边的运算数类型不同,先要将其转换为相同的类型,即较低类型转换为较高类型,然后再参加运算,转换规则如下图所示:
在这里插入图片描述
C 语言中 printf 输出 double 和 float 都可以用 %f 占位符 可以混用,而 double 可以额外用 %lf。
而 scanf 输入情况下 double 必须用 %lf,float 必须用 %f 不能混用。

### C语言中显式强制类型转换 在C语言中,显式强制类型转换是指程序员通过特定的语法结构来改变表达式的类型[^2]。这种方式允许开发者将一个数据类型的值转换成另一个指定的数据类型。 #### 强制类型转换的语法 强制类型转换的一般形式如下: ```c (type) expression; ``` 这里 `(type)` 表示目标类型,而 `expression` 是要被转换的原始表达式或变量。 #### 示例代码展示 下面是一些具体的例子展示了如何使用强制类型转换: ```c #include <stdio.h> int main() { double d = 10.5; // 定义双精度浮点数d=10.5 int i; i = (int)d; // 将double型数值强转为整型, 结果i=10 printf("Original value as integer is %d\n", i); float f = 9876.5432f; // 定义单精度浮点数f=9876.5432 long l; l = (long)f; // 把float型数值转化为long型, 可能会丢失精度 // 注意:如果超出了long范围,则结果未定义行为 printf("Float to Long conversion result: %ld\n", l); char c = 'A'; // 字符'A' unsigned short us; us = (unsigned short)c; // 转换字符到无符号短整形 // ASCII码表中,'A'对应十进制65 printf("Character A converted into ushort has the value of %hu\n", us); return 0; } ``` 上述程序片段说明了多种常见的基本数据类型间的相互转换方法,并且强调了当发生截断时可能出现的信息损失情况。 #### 需要注意的地方 - 当从较大范围的数据类型向较小范围的数据类型做转换时(比如从`double`到`int`),可能会导致信息丢失。 - 如果源操作数超出目的类型的表示范围,在某些平台上可能导致不可预测的结果。 - 对于指针之间或者指针与其他算术类型之间的转换应当特别小心,因为这可能引发严重的错误甚至安全漏洞。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值