首先来看一段程序
#include<stdio.h>
int main()
{
printf("%d",13.4);
return 0;
}
这段程序的运行结果是什么呢?
13.4还是13,如果你猜的是这两个答案,那么恭喜你答错了,那么运行结果到底是什么呢?
是不是很好奇为什么得到是这个数据呢,下面让我们看一下。
首先我们都知道13.4是一个浮点型的数据,而我们是使用%d来解析的,就是十进制整数,但是printf本身并不会进行数据类型的转换,因此我们得到了这样一个数据。如果想要进行正常的输出我们则需要进行强制转换;
#include<stdio.h>
int main()
{
printf("%d",(int)13.4);//强制类型转换
return 0;
}
运行结果如下:
这样我们就得到了一个正常的值。
隐式转换
整型,实型和字符型数据之间可以混合运算。
例如:10+‘a’+1.5-8765.123*‘b’
这个表达式的运算过程如下:
- 进行10+'a’的运算:将’a’转换成整数97 ,得到和为107;
- 进行107+1.5的运算:将107转换成double型,得到和为1 08.500000;
- 进行8765.1234*b’的运算:将’b’转换成double型数98.000000,再与8765. 1234相乘;
- 把之前得到的108. 500000减去8765.1 234*'b’的值,就完成了整个表达式的求值。
不同数据类型之间运算会进行自动类型转换,规则如下:
强制类型转换
- 一般形式:(类型名)(表达式)
例:
int(x+y)
(int)x+y
(double)(3/2)
(int)3.6
- 说明:强制类型转换得到所需类型的中间变量,原变量类型、变量值保持不变
注:
- 类型转换时在寄存器里面转换的,而不是内存里面。
- 浮点数转换成整数会有精确度的损失(大转小),转换时要特别注意数据类型的范围,防止造成数据溢出。