C语言学习笔记(8)——表达式中数据类型的转换

目录

8.1 自动类型转换

8.1.1 转换规则

8.1.2 示例程序

8.2 强制类型转换


8.1 自动类型转换

8.1.1 转换规则

数据类型的自动转换按照以下规则进行:

(1)若参与运算量的类型不同,则先转换成同一类型,然后再进行运算。

(2)转换按数据长度增加的方向进行,以保证精度不降低。

(3)所有的实数运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算。

(4)char型和short型参与运算时,先转换成int型。

(5)在赋值运算中,赋值号两侧量的数据类型不同时,赋值号右侧量的类型将转换为左侧变量的类型,当右侧量的数据类型长度比左侧变量的数据类型长度大时,会降低精度。

数据类型自动转换示意图如下:

图中横向箭头表示必定的转换:char型、short型在运算时一律先转换为int型;float型数据在运算时一律先转换成double型,以提高运算精度。

纵向的箭头表示当运算对象为不同数据类型时转换的方向。注意箭头方向只表示数据类型级别的高低,由低向高转换,并非逐级转换。

8.1.2 示例程序

自动类型转换示例程序:

#include <stdio.h> 
int main() 
{ 
	float a,b;
	float pi=3.1416;
	int s, r=4;
	a=5/2-4/3;
	b=3.0/2+5/3.0;
	s=pi*r*r;
	printf("s = %d\n",s);
	printf("a = %f, b = %f\n",a,b);
	return 0;
}

代码分析:①整数除整数结果为整数,所以5/2-4/3的整数结果赋给浮点变量a,以浮点小数形式存储。②浮点数和整数的运算结果为浮点数,所以3.0/2+5/3.0的浮点小数结果赋给浮点型变量b,以浮点小数形式存储。③pi为实型,s、r为整型。在执行s=pi*r*r语句时,pi和r都转换成double型计算,结果也为double型。但由于最终结果要赋给整型变量s,故将double型的结果舍去了小数部分,赋给整型变量s。

运行结果:

s = 50

a = 1.000000, b = 3.166667

8.2 强制类型转换

可以通过强制类型转换运算符来将一个表达式转换成所需要的类型。一般形式为:(类型说明符)表达式

作用是把表达式的运算结果强制转换成类型说明符所表示的类型。例如:(int)7.4%3表示先把7.4转化成整数7,再对3取余。(int)2.3*12是把2.3转换成整型再与12相乘。

 

关于数据类型转换还应注意:

(1)进行强制类型转换时,“类型说明符”和“表达式”须以括号限定(“表达式”为单个变量或常数值时,其括号可以省略),否则类型转换仅在局部进行。

(2)无论是强制类型转换还是自动类型转换,都只是为了本次运算的需要而进行的临时性转换,相关变量的数据类型不会被改变。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆毛小叮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值