C语言学习笔记(数据类型,运算符和表达式04)20200618

各类数值型数据之间的混合运算

变量的数据类型是可以转换的。转换的方法有两种,一种是自动转换,一种是强制转换。自动转换发生在不同数据类型的量混合运算时,由编译系统自动完成。自动转换准寻以下规则:

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

2)转换按数据长度增加的方向进行,以保证精度不降低。如 int型和long型运算时,先把int型转换为long型在进行运算。

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

4)char型和short型参与运算时,必须先转换为int型。

5)在赋值运算中,赋值号两边的数据类型不同时,赋值号右边量的类型将转换为左边的类型。
C语言学习笔记(数据类型,运算符和表达式04)20200618_第1张图片
例:

#include 
#include 



void main()
{
   float pi = 3.14159;
   int s, r= 5;
   s = r * r * pi;
   printf("s = %d\n",s);
}

C语言学习笔记(数据类型,运算符和表达式04)20200618_第2张图片
本程序中,pi为实型,s,r为整型。在执行rrpi中,r和pi都转换成了double型计算,结果也为double型,但由于s为整型,故赋值结果为整型,舍去了小数部分。

强制类型转换

强制类型转换是通过类型转换运算来实现的。
其一般形式为:
(类型说明符)(表达式)
其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。
例如:

(float)a//把a转换为实型
(int)(x+y)//把x+y的结果转换为整型

在使用强制转换时应注意以下问题:
1)类型说明符合表达式都必须加括号(单个变量可以不加括号),如把(int)(x+y)写成(int)x+y则成了把x转换成int型之后再与y相加了。

2)无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明是对改变量定义类型。

例:

#include 
#include 

void main()
{
   float f = 5.75;
   printf("(int)f=%d\nf=%f\n",(int)f,f);
}

C语言学习笔记(数据类型,运算符和表达式04)20200618_第3张图片
本例表明,f虽强制转换为ing型,但只在运算中起作用,是临时的,而f本身的类型并不改变,因此(int)f的值为5(删去了小数)而f的值仍为5.75。

算术运算符合算术表达式。

基本的算术运算符

加法运算符 ‘+’;加法运算符为双目运算符,那应有两个量参与加法运算。如a+b,4+8.具有右结合性。

减法运算符‘-’;减法运算符为双目运算符。但“-”也可作为负值运算符,此时为单目运算,如 -x,-5等具有左结合性。

乘法运算符“*”;双目运算,具有左结合性。

除法运算符‘/’;双目运算具有左结合性,参与运算量均为整型时,结果也为整型,舍去小数。如果运算量中有一个是实型,则结果为双精度实型。

#include 
#include 

void main()
{

   printf("%d,%d\n",20/7,-20/7);
   printf("%d\n",100%3);
}

C语言学习笔记(数据类型,运算符和表达式04)20200618_第4张图片

你可能感兴趣的:(万物皆可C)