各类数值类型之间的混合运算、强制转换、算术运算符和算术表达式

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

变量的类型是可以进行转换的,在之前的博客里面也写过,数据类型的转换有两种:一种是隐式转换(自动转换),另一种则是显式转换(强制转换 ),一般的数据运算都是系统自动进行隐式转换 。

隐式转换遵循以下规则

  1. 数据类型不一样的时候,先转换成同一类,再进行运算。
  2. 转换按数据长度增加的方向进行,例如int型和long型进行运算,先将int型转换为long型再进行运算。
  3. 所有的浮点运算都以双精度进行运算,即便是只含float单精度的也要先转换成double型再进行运算。
  4. char型跟short型参与运算时,必须先转换成int型。(cpu通常是32位跟64位,但系统有的时候是32位,所以运行的时候还是按照32位的来。)
  5. 在进行赋值运算的时候,赋值号右边的数据类型会先转换成左边的数据类型再进行运算。如果右边的数据类型精度更高,那么会折损掉一部分的数据,降低精度,丢失的部分按四舍五入向前舍入。

下图是类型自动转换的规则示图:
在这里插入图片描述
接下来,来感受以下这方面的相关程序案列:
【5.1】

#include <stdio.h>

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

因为赋值运算的等号左边使用的是整型s,所以即使PI是float型也会被强制转换成整型,后面的小数部分被舍去。最后的输出结果如下:
在这里插入图片描述
强制类型转换:通过类型转换运算来实现。
其一般形式为:
(类型说明符)(表达式)
其作用是将表达式的运算结果转换成类型说明符所表示的类型。
例如:
(int)a :将a转换成int类型

注意:类型说明符前面一定要加括号(单个变量可以不加);无论是强制转换还是自动转换都是为本次运算的需要而对变量的数据长度进行临时性转换,而不改变数据说明对该变量定义的类型。

还是举个实在的例子来的更明显一些:

#include <stdio.h>
void main()
{
float f = 5.75;
printf("(int)f=%d,f=%f",(int)f,f);
}

输出的结果:
在这里插入图片描述
这里就很好理解,第一个(int)f输出的结果就是整型,第二个输出的float型。当我们将printf("(int)f=%d,f=%f",(int)f,f);中的(int)f,f去掉以后不会报错,但是输出的结果会是乱七八糟的,因为没有给它传值。

算术运算符和算术表达式:

加法运算符"+":双目运算符,即有两个量参与运算,具有结合性,如:1+2,x+y;
减法运算符"-":双目运算符,也可以作为负值运算符,此时为单目运算符。如:-x,-5等具有左结合性。
乘法运算符"*":双目运算符,具有左结合性。
除法运算符"/":双目运算符,且具有左结合性。参与运算量均为整型时,结果也为整型,舍去小数。如果其中有一个是实型,则结果为双精度型。这里放个程序案列:
【例5.2】

#include <stdio.h>

void main()
{
   printf("%d\n", 3/2);
}

结果可想而知是输出1的,因为二者皆为整型,因此结果也是整型,后面的小数部分直接被舍去。
在这里插入图片描述
求余运算符%:双目运算符,例如4%3,则结果余1。(就相当于小学时期学过的除法,除不尽就有余数,而这个余数就是我们求的)如例5.3
【5.3】

#include <stdio.h>

void main()
{
   printf("7/2=%d......%d",7/2,7%2);
}

输出结果:
在这里插入图片描述

发布了10 篇原创文章 · 获赞 1 · 访问量 1244

猜你喜欢

转载自blog.csdn.net/weixin_43671182/article/details/94497394