上一节我们介绍了承载任务的元数据:变量,也介绍了一些常用的变量。
1、表达式
但是在上一节代码中涉及到了这样的代码a=a+1;
其中在我们理解这段代码的时候,需要将右边的a+1看成一个整体。
其实类似这样的整体我们的学名叫做表达式,在这里a+1就是算数表达式,它是计算的基本组成。
那么由a+1这样的算数表达式,我们可以推出加、减、乘、除四个数学运算的算数表达式
比如:
其中b=a+1;的意思是,将a+1的结果放入b中,然后经过下面的Console.WriteLine(“此时的b中存储的是:”, b);将b中的值输出来,其他的以此类推。
2、表达式是一个整体
但是我们曾表述a+1是当成一个整体看,只是在程序运行后,我们要使用这个表达式的结果,所以我们的代码也可以这样修改:
在这里我们看到Console.WriteLine(“加法结果:”, a + 1);
其中替换标识符需要使用后面提供的替换内容,但是替换内容却写着a+1,那么在这里就充分的体会到了,表达式其实就是一个整体,当程序运行到这个位置的时候,知道了替换标识符需要用到后面的替换内容,那么程序就在这里直接计算a+1,并将结果传递给替换标识符。
3、存储表达式值的变量类型应当和表达式计算的结果类型一致
3.1运算符两边的操作数类型不一致
但是在我们实际的运算过程中会发现一个现象,比如:
这样是可以正常运行的,但是修改代码:
这个时候就报错了,并且将鼠标放在红色波浪线位置会发现:
这是怎么回事?
这种情况是因为,我们的C#在运行的时候,将我们计算过程中使用的变量分类十分的严格,我们的a+1.1得到的结果是一个小数,我们可以直接用Console.WriteLine()输出,但是在这句话上c=a+1.1中,是将a=1.1的值存储在c中,那么此时的c就不能是int了,需要是double,于是我们修改代码:
就可以正常运行喽。
3.2运算符两边操作数类型一致,但是结果类型不一致
还有一种现象:
这……分明是计算错误嘛,这咋能得0呢?
我们再看一个现象:
这……这里我分明已经用小数的数据类型保存运算结果啦?但是说好的1.5呢?
但是,我们简单修改代码:
这是咋回事?
其实这里在运算的时候,表达式会自动检测两边的操作数的数据类型,并将计算结果的数据类型默认为操作数中范围较大的类型。
比如:int a=2,计算a/3这个表达式的时候,/号发现两边的操作数数据类型都是int,于是计算的时候,就在int范围内计算结果,因为我们得到的是一个小于1的小数,所以表达式直接在结果的整数部分取值,所以计算结果为0。
这个结论在int a=3,计算a/2这个例子中印证了,即使这时候,我们用一个小数c来存储a/2的值,虽然这个值实际应当为1.5,但是由于此时/号两边均为int类型,表达式的值直接取整数部分,所以只为1。
但是在double a=3;这个例子中计算a/2的时候,/号发现两个操作数中一个是int,一个是double,其中double比较大,所以那么计算结果就用double喽,就这样我们得到了1.5。
所以这里例子提醒我们,在编写表达式的时候需要注意表达式中变量类型和存储表达式的值的变量类型,以免出现运行错误,或者运行结果和正常逻辑不一致情况。
4、求余表达式
在计算表达式中,还有一个特殊的符号%,这个符号是求余数表达式,我们看代码:
这个就不多说啦,就是我们小学学习的求余数算法。
5、赋值运算符
在我们的实际编写代码过程中,会出现一些代码的简写方式,比如:
这种是正常的写法,现在我们对这样的写法进行简单的修改:
这……又是咋回事,这代码没敲错吧?
这里就涉及到了一个新的知识点,赋值运算符,这里的a+=1就相当于a=a+1。
所以以此类推,我们有+=,-=,*=,/=,%=。
其实我们之前提=的时候,我们说=号是赋值运算符,所以=,+=,-=,*=,/=,%=这6个就是完整的赋值运算符,只是=只有赋值功能其余的5个都有运算并且赋值的功能。