从零开始学习C语言丨认识运算符

三玹 2022-11-02 16:19:49 浏览数 (2564)
反馈
原文: https://mp.weixin.qq.com/s?__biz=Mzg3OTc3MjcyOQ==&mid=2247483780&idx=1&sn=6d81b639c7bb296ef9a3363e72ad32b7&chksm=cf7e14d2f8099dc4bad3cda3ed2b06102bfec95aa4e2a879b6d3c2f77b72225e0674ca749004&scene=178&cur_album_id=2588823761982849025#rd

 本文发布于微信公众号:三玹
哈喽,各位朋友们好啊!马上就要国庆节了,工作上的事情也变得愈发的繁忙了,难得抽个空来写一写文章。
前面学了C语言中的指针类型,其实关乎于指针的内容还有很多没有涉及到,我也不想一开始就学这么复杂的,否则把自己搞得昏头昏脑的,那不是纯纯的劝退。这篇文章,我们就来聊一聊简单的内容,运算符。
计算机的诞生,本身是为了解决数学问题,因此可以说计算机领域是数学领域的延伸。既然有关数学,那自然就离不开一些运算了。
赋值运算符
这个运算符,其实我们在前面的文章中一直都有用到。比如,变量赋值中:
int a = 3;

这行代码中的 = ,就是赋值运算符。

可能有人就要问了,不对吧,这个在数学中不是等于号,表示相等的意思吗?

没错,= 在数学中是表示相等的意思,但是在计算机语言当中,=是表示赋值,而相等是有另外一种表示方式,下面将会在算术运算符中解释的。

那什么是赋值?

给大家说一个比喻:我有一个东西,我不想一直拿在手上,想要交给变量 a 这个人来帮我保管,当我要用的时候,叫 a 过来就可以了。而我将东西交到 a 的手上,这个过程就叫作赋值。

当我想让 a 帮我保管另外一个东西,我只需要通过赋值符号将东西交给 a 就可以。

a = 5;

除此之外,赋值符号还有如下这些:

赋值运算符
含义
案例
+=
将左边变量的值加上右边的值后,重新赋值给左边的变量。
c+=a
c =  c + a
-=
将左边变量的值减去右边的值后,重新赋值给左边的变量。c-=a
c = c - a
*=将左边变量的值乘以右边的值后,重新赋值给左边的变量。c*=a
c = c * a
/=
将左边变量的值除以右边的值后,重新赋值给左边的变量。c /= a
c = c / a
%=
将左边变量的值除以右边的值后,将余数重新赋值给左边的变量。c %= a
c = c % a
<<=将左边的变量的值的二进制码向左移动n位后得到的值,重新赋值给左边的变量。a <<= 2
a = a << 2
>>=将左边的变量的值的二进制码向右移动n位后得到的值,重新赋值给左边的变量。a >>= 2
a = a >> 2
&=
按照位与运算符将左边变量的值和右边的值计算后,重新赋值给左边的变量。
a &= 2
a = a & 2
|=
按照位或运算符将左边变量的值和右边的值计算后,重新赋值给左边的变量。a |= 2
a = a | 2
^=
按照异或运算符将左边变量的值和右边的值计算后,重新赋值给左边的变量。a ^= 2
a = a ^ 2

里面的一些运算符,咱们就来看下面的内容。

算术运算符

既然是数学,肯定是少不了加减乘除这些运算的。计算机语言中也有相应的符号来表示加减乘除,而且和数学中的运算符号还是很相似的。

先来看看,算术运算符有哪些个(这里假设两个整型int变量 a=3,b=4):

算术运算符
含义
案例
+
用于两数相加
a+b == 7
-
用于两数相减
a-b == -1
*用于两数相乘a * b == 12
/
用于两数相除
a / b == 0
%
获取两数相除后的余数a % b == 3
++
累加,每次计算 +1
a++ == 4
--
累减,每次计算 -1
a-- == 2
上面表格中的案例,相信有些人会对除法和取余两个表示疑惑。
先来解释一下除法的案例。按道理来说,3 除以 4,结果应该是 0.25,天王老子来了都不会变,作者你是不是小学数学没学好?
首先得先肯定一下,真实答案确实是 0.25。但在前面的数据类型中有提到,两个整型相除结果还是整型,即保留整数部分,剔除掉小数部分。而这里事先声明了两个变量都属于整型 int 类型的变量,因此相除的结果自然就是 0.
第二个取余的,或许有人理解不了。我们来看一个式子:3 ÷ 4 = 0 ...... 3。这个式子相信大家都都有印象吧。这里的取余,即使两数相除之后,整数部分已经没有位置可以再填充了,剩下多少就是余数。而余数一般都是 0-9 之间,绝对不会是两位数的。
关系运算符
在算术运算符表格中的案例,我们已经见到了一个关系运算符。没错,就是 ==,它在计算机语言中表示的就是相等的意思。
来看一下关系运算符有哪些:
关系运算符
含义
==
相等
!=
不相等
>
大于
<小于
>=
大等于
<=小等于

关系运算符在编程中的作用是什么?

通常会用在后面要说的判断结构里面。例如,现在都这么高科技了,假设进入网吧需要把身份证放在某个机子上进行辨别。

那么,这个就需要进行判断和比较,如果身份证的年龄小等于 18 岁,是不被允许进入的,机子会发出警告红灯。反之,大于18岁的,机子就呈现绿灯,你就可以进去畅快地 hasaki 了!

逻辑运算符

逻辑运算符通常是也是用在判断结构中,比如你需要判定多个条件的时候,就需要用到这个逻辑运算符。还是去网吧,你首先年龄得达到吧,其次你钱得带够吧,无论哪一个条件你不满足,都会被赶出去的。

那么,C语言中支持哪一些逻辑运算符呢?来看下面这个表格:

逻辑运算符
含义
&&
与,即所有条件同时满足才能执行。
||或,即只要其中一个条件满足就可以执行。
!非,取反逻辑状态。即原本条件满足,加上这个符号就不满足了。

关于逻辑运算符,后面在判断结构中再详细展开。

位运算符

在计算机中,位是最小的存储单位(bit)。8个bit组成了一个字节(Byte),每个位里面存放的不是 1 就是 0。因此,位运算符主要是针对于二进制的运算。

位运算符含义
&
位与,同时为 1 才为 1.
|位或,同时为 0 才为 0.
^异或,同为 1 或同为 0,都为 0.
~
取反,原本是 1,结果为 0;原本为 0,结果为 1.
<<左移,操作的值向左移动 1 位。
>>
右移,操作的值向右移动 1 位。

先来看一下,位与、位或、异或三个运算符的使用:

p
qp&q
p|q
p^q
0
00
0
0
1
00
11
1
11
1
0
0
10
11

再来看一下,取反、左移、右移三个运算符的使用。这里设定 a 的值为 60,对应的二进制码为 0011 1100。

运算符
十进制
二进制十进制二进制
~a
60
0011 1100
-61
1100 0011
a<<2
60
0011 1100
2401111 0000
a>>260
0011 1100
15
0000 1111

左移、右移运算符后面的数值,二进制码向左或者向右移动几位。

杂项运算符

除了以上这些常用的运算符之外,C语言中还有一些特别重要的运算符:

sizeof()

用来返回变量的内存大小。

int a;
sizeof(a); // 4
char c;
sizeof(c); // 1

寻址运算符

在前一篇指针文章中有提到这个运算符,&。和位运算符中的位与运算符&长得一样,但是作用是完全不同的。

寻址运算符是加载变量前面,表示变量的内存地址。

int a;
&a; // 00000001
解引用运算符
这个运算符在指针中也有提到,和算术运算符中的乘法运算符 * 长得一样,同样的,它们作用的意义也是不同的。
解应用运算符通常用在变量声明的时候,表示该变量是一个指针。
int *p;

三元运算符

这是一个条件表示,问号前面是一个判断表达式,问号后面则是式子成立和不成立返回的内容。成立将冒号前面的值赋给变量,不成立就将后面的值赋给变量。

int a = 3 > 4 ? 0 : 1;

最后

关于运算符的知识就简单的讲到这里了,具体的使用到后面应用过程中有用到,会再次展开说一下。下一篇文章,说一下判断结构。

最后,非常感谢大家的观看。大家的支持,是我写下去的动力!


C

0 人点赞