【从零开始的 C 语言笔记】第四篇-基本的运算子介绍 & 应用

不怎么重要的前言

上一篇我们大概的介绍程式的结构,也出了一个小作业,不晓得大家有没有试试看呢?

其实写程式真的没有想像中那么困难的,就像学英文一样好好的学习、理解文法,就可以很好上手了,希望大家不要害怕来跟着一步一步学习吧!


上次的小作业--列印三角形

方法一、

#include <stdio.h>int main(){    printf("*\n");    printf("**\n");    printf("***\n");    printf("****\n");    printf("*****\n");    return 0;}

方法二、

#include <stdio.h>int main(){    printf("*\n**\n***\n****\n*****\n");    return 0;}

方法一定不只这两种,也不是只有这两种方法才是对的,多去尝试吧!


运算子是什么?

可能大家对运算子这个名词有点陌生,所以我们来举个一定使用过的「+ - * /」,这个加减乘除大家一定是很熟悉的,这些符号在资讯领域我们会称它为运算子;那说到加减乘除的话不可不提的,就是被运算子运算的运算元了,运算元举简单的例子「3+2」来说,其中的「3」、「2」就是运算元,是会被运算子处理的资料。

可能大家现在有点头晕了,简单来说运算子负责运算、处理运算元(资料),而「3+2」这整个式子我们会称为运算式。

我们来用图解结论一下:
http://img2.58codes.com/2024/20142565L0uLDuOsHp.png

然后除了这些当然还有很多很多,就不再一一介绍了,接下来我们来测试看看吧!(其他详细资讯可以到wiki这里参考)


常用运算子测试与运用

以下只是简单的介绍与测试,欢迎自己改数字等等的尝试看看。

基本的算术运算子
(1) + - * / % (加、减、乘、除、取余)
我们以下面的程式码来进行测试:
#include <stdio.h>int main(){    printf("%d\n", 5 + 2);    printf("%d\n", 5 - 2);    printf("%d\n", 5 * 2);    printf("%d\n", 5 / 2);    printf("%d\n", 5 % 2);    printf("---我是分隔线---\n");    printf("%f\n", 5.0 + 2);    printf("%f\n", 5.0 - 2);    printf("%f\n", 5.0 * 2);    printf("%f\n", 5.0 / 2);    return 0;}

而上段程式码输出的结果会为:
http://img2.58codes.com/2024/20142565T3cg9zDhM8.png

其中如果不看printf语法(之后会再提),比较特别的大概是「%」了,它是用于取余数的运算子,所以「5%2」时会列印出无法被整除的余数「1」;而「/」则是因为在程式码中,若其运算的两个运算元都是整数,会预设输出可以被整除的商「2」。

而如果运算的两个运算元有一方或双方为浮点数(小数),输出就会为浮点数了,但输出为浮点数的情况下就不能使用「%」。

(2) + - (正负号)
我们以下面的程式码来进行测试:

#include <stdio.h>int main(){    printf("%d\n", + 2);    printf("%d\n", - 2);    printf("---我是分隔线---\n");    printf("%f\n", + 2.0);    printf("%f\n", - 2.0);    return 0;}

而上段程式码输出的结果会为:
http://img2.58codes.com/2024/20142565lPBwkbTvar.png

(3) ++ -- (递增、递减)
这里我们就不多介绍了怕太混乱,有兴趣的朋友可以自行爬文,查查看它的使用方式。
(或是可以查看这个网页的介绍,写的很清晰也有解释前缀后缀时的差异)

基本的比较运算子

以下範例若列印出1为ture、0则为false。
(1) > < >= <= (大于、小于、大于等于、小于等于)
我们以下面的程式码来进行测试:

#include <stdio.h>int main(){    printf("> 之结果:\n");    printf("%d\n", 5 > 2);    printf("%d\n", 2 > 5);    printf("%d\n", 5 > 5);    printf("------\n");    printf("< 之结果:\n");    printf("%d\n", 5 < 2);    printf("%d\n", 2 < 5);    printf("%d\n", 5 < 5);    printf("------\n");    printf(">= 之结果:\n");    printf("%d\n", 5 >= 2);    printf("%d\n", 2 >= 5);    printf("%d\n", 5 >= 5);    printf("------\n");    printf("<= 之结果:\n");    printf("%d\n", 5 <= 2);    printf("%d\n", 2 <= 5);    printf("%d\n", 5 <= 5);    printf("------\n");    return 0;}

而上段程式码输出的结果会为:
http://img2.58codes.com/2024/20142565zsuU9Eass3.png

(2) != == (不等于、等于)
我们以下面的程式码来进行测试:

#include <stdio.h>int main(){    printf("== 之结果:\n");    printf("%d\n", 5 == 2);    printf("%d\n", 5 == 5);    printf("------\n");    printf("!= 之结果:\n");    printf("%d\n", 5 != 2);    printf("%d\n", 5 != 5);    printf("------\n");    return 0;}

而上段程式码输出的结果会为:
http://img2.58codes.com/2024/20142565xAoSSzfgVe.png

(3) && || (条件and比较、条件or比较)
我们以下面的程式码来进行测试:

#include <stdio.h>int main(){    printf("&& 之结果:\n");    printf("%d\n", (5 == 5) && (2 == 2));    printf("%d\n", (5 != 5) && (2 == 2));    printf("%d\n", (5 != 5) && (2 != 2));    printf("------\n");    printf("|| 之结果:\n");    printf("%d\n", (5 == 5) || (2 == 2));    printf("%d\n", (5 != 5) || (2 == 2));    printf("%d\n", (5 != 5) || (2 != 2));    printf("------\n");    return 0;}

而上段程式码输出的结果会为:
http://img2.58codes.com/2024/20142565YCGPZ4hW7r.png

「&&」在左右条件皆为ture的情况,输出为ture,反之则为false;「||」在左右条件任一方为ture或两方都为ture时,输出为ture,反之双方皆为false时则输出false。

(4) ! (取反逻辑)
我们以下面的程式码来进行测试:

#include <stdio.h>int main(){    printf("! 之结果:\n");    printf("%d\n", (5 == 5));    printf("%d\n", !(5 == 5));    printf("%d\n", (5 != 5));    printf("%d\n", !(5 != 5));    printf("------\n");    return 0;}

而上段程式码输出的结果会为:
http://img2.58codes.com/2024/20142565pdWIA9fS6k.png

位元运算子
(1) << >> (位元左移、位元右移)
这个运算子大家应该陌生许多,在资讯领域中计算机(机器、电脑等等)通常是以二进制(0、1)的方式储存资料、运算、传输,详细的原因我们就不多讲,若有兴趣可以在自行查询,我们稍微图解一下这个运算子的使用方式。
http://img2.58codes.com/2024/20142565l2Cxiyzleu.png

我们以下面的程式码来进行测试:

int main(){    printf("<< 之结果:\n");    printf("%d\n", 4 << 1);    printf("%d\n", 4 << 2);    printf("------\n");    printf(">> 之结果:\n");    printf("%d\n", 4 >> 1);    printf("%d\n", 4 >> 2);    printf("------\n");    return 0;}

而上段程式码输出的结果会为:
http://img2.58codes.com/2024/20142565caXDxKFYeG.png

虽然大概知道怎么使用,但大家可能还对位元运算有点模糊,下面我用小画家图解一下原因:
http://img2.58codes.com/2024/20142565u8gTFsbnye.png
(对二进制有疑惑的朋友可以另外查看这个页面,这个是介绍数字系统的)

(2) & | (位元and运算、位元or运算)
我们以下面的程式码来进行测试:

#include <stdio.h>int main(){    printf("& 之结果:\n");    printf("%d\n", 0 & 5);    printf("%d\n", 0 & 10);    printf("%d\n", 15 & 5);    printf("%d\n", 15 & 10);    printf("------\n");    printf("| 之结果:\n");    printf("%d\n", 0 | 5);    printf("%d\n", 0 | 10);    printf("%d\n", 15 | 5);    printf("%d\n", 15 | 10);    printf("------\n");    return 0;}

而上段程式码输出的结果会为:
http://img2.58codes.com/2024/20142565wFMnUpxecH.png

运算子跟上一个一样都是位元上的运算,而且是每个位元间的运算,都把数字转成二进制会比较好理解,前面可能没有把and、or说清楚,我们稍微图解一下。
第一步骤:我们先来了解and跟or的规则
a. and

值1值2输出000010100111b. or值1值2输出------000011101111

第二步骤:知道了and、or的规则我们再来把进制转换一下。

十进制二进制005101101010151111

第三步骤:转换完二进制后再进行「&」跟「|」的运算
举四个例子:
a. 0 & 5

项目二进制十进制值100000值201015and 运算--------结果00000

b. 15 & 10

项目二进制十进制值1111115值2101010and 运算--------结果101010

c. 0 | 5

项目二进制十进制值100000值201015or 运算--------结果01015

d. 15 | 10

项目二进制十进制值1111115值2101010or 运算--------结果111115赋值运算子
(1) = (设为某值、赋值)
这个运算子会在往后频繁的使用到,所以一定要知道这个用法,在资讯领域中「=」的用法跟数学定义是不一样的,会用来赋予某资料一个值,虽然我们还没有教到变数,不过在下一篇会提到,这里我们先将就着看图解。
http://img2.58codes.com/2024/20142565y9FUc1mifZ.png

我们以下面的程式码来进行测试:

#include <stdio.h>int main(){    int data;    data = 777;    printf("%d\n", data);        data = 8787;    printf("%d\n", data);    return 0;}

而上段程式码输出的结果会为:
http://img2.58codes.com/2024/20142565JkwhXSSzzz.png
可以看到当「data = 777;」时,data变数就存进了777,列印data时显示的结果就是777;而当我们第二次赋值时,「data = 8787;」会覆盖掉上次的值,在列印data时显示的就变成8787了。

(2) += -= *= /= %= (运算后赋值)
我们以下面的程式码来进行测试:

#include <stdio.h>int main(){    int data;    data = 2;    printf("%d\n", data);    data += 3;    printf("%d\n", data);    return 0;}

而上段程式码输出的结果会为:
http://img2.58codes.com/2024/20142565qL7mcYs6Iz.png

其实这类的运算子是由两个步骤组成,先进行算术运算、最后再赋值,就不多做其他的例子了,有兴趣可以自行尝试看看这些运算子,而+=时如下图解。
http://img2.58codes.com/2024/20142565DKAWa5fMRY.png


辛苦看到这里的你,可能已经开始有点小混乱了吧,你已经很棒啦,基本上比较会使用到的就是这些了,可以多多尝试帮助自己记忆,也能更理解这些用法。

下一篇我们来学习什么是资料型态!


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章