算术运算导致溢出_用实例带你了解C语言的灵魂:算法基础算术运算符和算术表达式...

从今天我决定改变一下讲解的方式,因为纯文字谁不会呢?照着书本来搬,就什么都来了,我们根据不同的算法代码来讲解不同的知识点。

d66329b4b6797bd7db0abf12316aacd2.png

我们已经开始接触算法,那我们就出题目来进行一个操作:

第一题:一辆货车运输箱子,载货区宽2米,长4米;一个箱子宽1.5米,长1.5米,请问载货区一层可以放多少个箱子呢?(箱子的数量是一个整数,不存在半个箱子)。

我们根据题目来分析,首先我们得定义两个整型变量,一个是载货区的长Long1、一个是载货区的宽WIDE1,还需要定义两个浮点型的变量箱子的长Long2、宽WIDE2。那么我们看下图的代码

a6e116453b4d14bb8706940a3e4f7e0a.png

我们今天讲的是类型的转换和优先级,还会了解一些运算符和自加、自减的内容。

首先我们看上图代码,

第一行头文件,每个程序都需要有的预处理命令#include,这个在之后我们会专门的讲解。

第二行main函数,每个C的源程序不论由多少个文件组成,它都有且只能有一个主函数main。

第三行开始就是我们今天讲的重点,这里定义的是整型变量的长和宽:WIDE和Long,箱子的长和宽,数值是1.5,我们定义为实型的变量(也叫做浮点型)用f,那么我们现在看刚才的题目,题目最后的补充是不可能会有半个箱子,那么最后的变量定义为整型,可是这里需要浮点型和整型一起进行计算,那样我们需要怎么办呢?

因为数值类型有很多种,字符型、整型、浮点型等等,这些类型的变量长度和符号的特性都不同,所以取值也就不同,之前讲了我们把短数值类型的变量比喻成小水杯子,长数值类型的比喻成大水杯子,那么你从小水杯子给大的杯子里倒水,那么能容下,所以数据什么都不会丢失,可是当你从大的往小的里面倒水呢?会溢出来的,那么这个转换我们应该怎么去呢?

就比如刚才的算法的代码:

int WIDE= 2, Long= 4;

float f=1.5;

我们把float(浮点型)赋予int(整型)的变量中去,按照常规的写法应该是如下:

int number = (int)(WIDE/ f) * (int)(Long/ f);

我们在每一个的前面都加了(int)这是什么意思呢?

(类型名称)(表达式)

这个属于强制性转换,在短数值向高数值转换的时候有时候编译器就会自动转换,但是有时候就会出现警告,只用强制转换之后,这个警告就没有了,但是你要注意的是如果你需要是一个表达式的值进行强制转换,那么你需要把这个表达式给括起来,不然它只转换第一个!

上面说的是自动类型转换和强制类型转换,下面我们讲优先级和结合性

讲优先级之前我们先来了解一下算术运算符:

e6badb13887815146432bcf4d383085f.png

C语言中有两个单目算术运算符、5个双目运算符,在五个双目运算符中的级别划分应该是乘法、除法和取模的级别高于加法和减法,单目运算符的级别是最高的。

加减乘除就不用讲了,这个%取模是计算两个整数相除所得到的余数,取模的两侧都为整数,比如7%4结果就为3。还有一点是“-”在5-3中是减法,此时为双目,在-5是为负值,此时为单目。

那么什么是算术表达式,就是表达式中使用了算术运算符的称为算术表达式,比如:

(int)(WIDE/ f) * (int)(Long/ f);

这个就是算术表达式,算术表达式的优先级,*、/、%大于+、-,比如说x+y*z那么计算机会先编译y*z后计算x+它俩相乘的值,如果都是平级的话就比如x+y-z,那么计算机采用的是由左往右的结合方向计算,就是先计算x+y的值后-z,比如说我们要想先让计算那个的值,我们就可以加括号,括号内的优先计算,就比如int number = (int)(WIDE/ f) * (int)(Long/ f);这个就是先计算(WIDE/ f)、(Long/ f)这两个的值后相乘的。

586abf34df0d55491739bffb79499851.png

最后在带大家了解自增和自减,自增++,自减--,自增的意思是自己加1,自减的意思就是自己-1这个可以由前缀和后缀的比如自增A++、++A,自减A--,--A,那么这两种写法的区别在于

B=A++的意思是B=A,A=A+1,比如说A=3,那么B=3

B=++A的意思是A=A+1,B=A,比如说A=3,那么B=4

注意:自增和自减属于单目运算符,常数和表达式不可以进行自增,自减的运算。例如3++和(x+3)++都是不合法的!

今天我们就学到这里,不知道这种根据实例的方法大家是否喜欢,喜欢就希望你们能关注我哦,另外给大家福利,需要编程软件的我免费送哦。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值