目 录(本篇字数:2120)
介绍
运算符分类
算术运算符
逻辑运算符
关系运算符
位运算符
赋值运算符
经典问题:a = 5,b = 8,如何交换两个变量的值?
-
介绍
说到运算符,从小我们就学过算术运算符了。算术运算符就是 +、-、*、/ 这四个。当然了,这局限于我们的初学期,之后我们可能会遇到 % ,如果你大学专业是计算机的话,那么必定会接触到 ++、--的运算,比如还有&、^、|、!等等一些,我就不再列举了。所以以上几种就是我们计算机中常用的运算符。
首先,我们先来看看计算机中运算符的归类吧,这也是我们打好算法基础的基石。
-
运算符分类
- 算术运算符
- 逻辑运算符
- 关系运算符
- 位运算符
- 赋值运算符
运算符大体上分为这几个类别,当然还有一些其他的运算符,我们将计算机中最常用的运算符掌握了就可以了。接下来,我们来看看这几个类别中的具体运算符的使用吧。
-
算术运算符
+ | 加法运算(6+3=9) |
- | 减法运算(6-3=3) |
* | 乘法运算(6*3=18) |
/ | 除法运算(6/3=2) |
% | 求余运算(6%3=0) |
+ | 正号 |
- | 负号 |
++ | 自增运算(++a,a++) |
-- | 自减运算(--a,a--) |
可能刚开始有些同学不太理解求余运算(也就是模运算),那么我举个例子来看看求余运算的具体运用。
刚开始学习C语言的时候,我们肯定都写过如何求闰年吧,那怎么判断今年是否为闰年呢?可能很多人都以为4年一闰年,当时我在学习C语言的时候,也是以为判断条件只要能被4整除就是闰年,这就有点缺乏常识啦。
标准的判断闰年的条件:
1. 能被4整除。
2. 不能被100整除,但可以被400整除。
比如,1700年、2100年就不是闰年,2000年才是闰年。(闰年有时候是4年一次,有时候却是8年一次)
那么以代码的方式来判断就是(这里就是用到求余运算了):
if(year % 4 ==0 && year % 100 !=0 || year % 400 == 0)
-
逻辑运算符
&& | A && B = 0(全为1才是真,任意一个为0就是假) |
|| | A || B = 1(全为0才是假,任意一个为1就是真) |
& | 同上,但是多个条件不中断,直到结束 |
| | 同上,但是多个条件不中断,直到结束 |
! | !A = 1,!B = 0 |
通过上面这个表格,或许你有点不理解。但是没关系,你只要记住这个判定法则就行了,我举几个例子来说明这几个运算符的区别和运用场景吧。
(1) 8 > 5 真 (2) 6 < 2 假 (3) 3 > 2 真 (4) 3 > 7 假
以上面几个充当判断条件,用这几个运算符进行简单区分,才能更好的解释运算符的作用。
&&
8>5 && 6<2 假 (一真一假)
8>5 && 3>2 真 (两真才为真,否则都为假)
||
8>5 || 6<2 真 (如有一真即为真)
6<2 || 3>7 假 (两假才为假)
!
这个好理解,没什么好说的。!假 = 真,!真 = 假
&& 、& 和 || 、 | 的运算法则是一样的,但是在计算机中却有这点区别:继续和中断。
8>5 && 6<2 假 ,首先判断第一个条件为真,继续第二个条件为假,则为假。下面交换条件位置:
6<2 && 8>5 假 ,首先判断第一个条件为假,不继续,直接为假。
运算规则:& 无论左边结果是什么,右边还是继续运算;&& 当左边为假,右边不再进行运算。同理,||与|也是如此。
-
关系运算符
这个比较简单,我就不用表格和例子来说明了,有数学基础的都会,只是在计算机中的表达形式不一样而已。
> (大于)、<(小于)、=(等于)、!=(不等于) 、>=(大于等于)、<=(小于等于)
-
位运算符
& | 与运算 |
| | 或运算 |
^ | 异或运算 |
~ | 非运算(取反) |
<< | 左移运算 |
>> | 右移运算 |
这个比较难理解,举个简单例子,数值是我随便写的。如果你对二进制转换有什么不理解的,请点击这里。
78&99=66, 这个是怎么计算的呢?
首先,位运算是二进制的运算,所以要把它们转成二进制,然后进行计算。
78 的二进制为 : 1001110
99 的二进制为 : 1100011
& 运算后得到值: 1000010 = 66
| 运算后得到值: 1101111 = 111
^ 运算后得到值: 0101101 = 45
~ 运算的计算公式是: -(x+1)。~78 = -79 ,~99 = -100 。那么 ~ -100 = 99 也是一个道理。
<< 左移运算,比如 5<<1 = 12,那么如何计算出来过程呢?下面我画一张草图来具体讲解一下这个过程:
>>右移运算也是同理,移几位,用几个零去补,然后重新组合成二进制的数。
如果不信的话,可以用高级计算器来换算一下。计算机用到码是二进制补码,其实,我们在数学中学过的命题是不是类似的道理。
-
赋值运算符
几类运算符中,还是属位运算符最难理解,因为涉及到计算机底层的运算,我们不是写底层的话,也不是经常用到。因为这些底层操作会使计算机处理的相对来说更加迅速,作为程序猿来说,还是得懂得基本运算的。
= | 赋值 |
+= | a += b 相当于 a = a+b |
-= | 同理 |
<<= | 同理 |
%= | 同理 |
&= | 同理 |
我就不依次列举这些赋值运算符了,以上几个就说明了赋值运算符的基本形式。当然,不能就这么学完就结束了。我们通过一个简单的题目,来运用一下这些运算符。
经典问题:a = 5,b = 8,如何交换两个变量的值?
哈哈,也许大多人都是会引用一个临时变量来保存,然后进行赋值交换。确实,这也是最最简单的一种。这种方法就好比两个杯子中的水、牛奶做交换,然后再拿一个空杯子做临时存放。但是,在计算机中引入变量就相当于开辟了内存,增加了内存开销。这种解法在底层中肯定是被遗弃的,因为底层更追求算法的极致、高效。所以来看看后面两种吧。
第二种:通过加减法运算,我们知道计算机保存变量的规则,所以利用这一点,既不需要引入变量,又可以进行交换。操作是这样的:
第三种:如果不是之前看到过,或者主攻算法方向的,还真的未必会想得到这种算法。这里运用了二进制运算符 ^,我们来看看操作:
©原文链接:https://blog.csdn.net/smile_Running/article/details/80916572
@作者博客:_Xu2WeI
@更多博文:查看作者的更多博文