2.4、变量的计算

By | 2014年12月31日

上面,我们学习了变量的定义

现在请打开编辑器,并创建一个新项目,我们将学习如何进行变量之间的计算。

请创建两个变量名分别为a和b的int变量。并将a初始化100,b初始化为200.

请自己写出来,不要找答案哦。

如果你忘了怎么写,你可以 戳我 打开上一篇文章,并且参照着写出来。

如果你已经搞定了,很好。让我们从最基本的加减乘除开始。

加和减的符号和我们生活中完全相同,就是“+”和“-”

不过乘并不是“×”而是*,除法不是“÷”,而是“/”。

它们的用法和数学中差不多。比如计算“1+2”,也就写成1+2

这样的式子叫做表达式,他将返回一个值,这个例子中就是3.

你可以将他赋值给一个变量,赋值的方法和初始化中是一样的。

a=3;       //这里执行后a的值就变成了3.

表达式就是一个值,因此a=1+2和前面的写法效果是相同的。

程序在执行时会先计算赋值符号右边的1+2,再将结果3存入a

表达式中并不是只能出现数字常量。变量之间,变量和常量之间都是可以进行计算的。

比如我们需要将a的值加上1000,将结果放入b,就可以写成这样:

b=a+1000;

这一个语句在执行时,会先将a的值提取出来,加上1000之后,再将结果存入b。

下面的程序将想你展示四则运算

#include <stdio.h>

int main()
{
    int a=100, b=200;
    b = a + 1000;
    printf("%d\n", b);    //输出b的值(1100)
    b = b - 200;
    printf("%d\n", b);    //输出b的值(900)
    b = b / 3;
    printf("%d\n", b);    //输出b的值(300)
    a = a * 10 + b / 100;
    printf("%d\n", a);    //输出a的值(1003)
    return 0;
}

如果你上面没有写出定义变量的程序,这里的源码便是答案(主要是第五行)

注意,a=a+1这种写法是完全正确的,前面已经说到过,=不是等于,而是赋值的意思,因此=两边的式子是有先后顺序的。并且是先执行性右边,再执行左边。

在这里,计算机会先取出a的值,加上1后再赋值给a,如果a一开始是1,那么执行完这一句后就会变成2.

赋值的时候会将上一次的值完全覆盖掉,而且不会留有任何痕迹(除非是你人为制造一个痕迹),在你执行上一个语句之后,就算是天王老子也不知道a一开始的值是什么。

到这里我想你应该已经对四则运算有所了解,你可以修改上面程序中的计算部分,观察输出结果的变化。

注意,字符串是不能进行四则运算的。

关于如何输出一个变量中的值的方法,我们将在后面学到,现在不需要了解。

下面我们来看看其他的运算符。

首先是%

这个符号在c语言中可不是百分号的意思,他的作用是“求余”,他可以计算两个数字之间的余数。别告诉我你已经忘记了余数是什么东西……

这个你要问你们的小学数学老师。我们刚刚开始学习除法时,计算3÷2=1···1

结果是1余1,想起来没有?没有的话你可以去找一块豆腐撞死了,不用冻。

比如我们需要计算1234除以5的余数,就可以写成

1234%5,结果显而易见是4.

注意余数只在整数下有意义,你对浮点数求余时会发生错误(你要不信邪的话可以试试,我还要鼓励你尝试,学习嘛,就要勇于尝试!)

当然,你也不能对一个字符串求余!

加减乘除我们已经学会了,对求余也有所了解。你可能会问,那么乘方开方呢?

你可能会想到“^”,但是很抱歉,这个符号在c语言中并不是乘方运算。c语言并没有为这两个运算提供运算符。那么我们如果要进行计算怎么办呢?我们可以选择相关的函数来解决这个问题。我们将在后面学到如何使用这些函数!

除了上面这些我们在生活中经常接触到的运算符,还有这样一些运算符。它们现在看似没有多大用途。(因此我们现在只是简单的了解一下)

它们就是位运算。计算机中的数据都是靠二进制保存的。比如1111 1101这个数据。

我们可以把这个数据左右移动,移动的单位是“位”,注意,移动的不是储存空间。

上面的数据1111 1101,我们可以将它左移一位,他就变成了11111 1010,但是计算机的储存空间是一定的,因此最高位的1将被丢弃(这种超出储存空间的情况叫做溢出,字面意思。就像你往杯子里倒水,满了自然水就溢出来了)

很显然数据整体往左移动了一位,最低位则补了0.

右移也是一样的,比如上面的数据,右移1位就是0111 1110,和左移差不多,只不过最低位丢弃,最高位用0填充。

左移的符号是<<

右移则是>>

比如将a变量左移5位,就可以写成a << 5

应该很好理解。你可能会说,他们似乎没有什么用啊。不急,知道这些不是坏事。

除了左移右移,我们还可以进行与或非的运算。

二进制有一个特点,就是每一位只有,也只可能有两种情况,就是0和1。

某一位不是0就是1,“非运算”就是将数据的每一位都倒过来,即0变1,1变0.运算符是“~”,这个符号只需要有一个操作的数据,这种运算符叫做单目运算符。

比如对a取反,就可以写成~a,如果a之前是1111 0001,取反后就变成了0000 1110.

“或运算”则需要两个操作的数据,它可以用来一位位的比较两个数据。

假设我们对a(1010)和b(1100)进行或运算,就可以写成a|b(中间的这个竖线符号一般在你的回车键上方)

它的运算规则是:“假假或假”,我们令0为假,1为真,就有相同的位上只要a或b中有一个变量的数据是1,结果中的这一位就是1。你可能听不明白。没关系,看一下例子就明白了。上面a|b的结果是(1110)

我相信以你的智商应该能看明白上面的“或运算”,我们最后再来看看“且运算”

且的运算符是&,规则是“真真且真”,只有当a和b的某一位上数据都为真,结果中的那一位才是真。a&b的结果是1000

其实后面还有“异或运算”等操作,但是我想你看到这里肯定已经晕了。就让我们把它留到后面再讲吧。

发表评论

邮箱地址不会被公开。 必填项已用*标注