从零开始学习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 |
| 关系运算符 | 含义 |
| == | 相等 |
| != | 不相等 |
| > | 大于 |
| < | 小于 |
| >= | 大等于 |
| <= | 小等于 |
关系运算符在编程中的作用是什么?
通常会用在后面要说的判断结构里面。例如,现在都这么高科技了,假设进入网吧需要把身份证放在某个机子上进行辨别。
那么,这个就需要进行判断和比较,如果身份证的年龄小等于 18 岁,是不被允许进入的,机子会发出警告红灯。反之,大于18岁的,机子就呈现绿灯,你就可以进去畅快地 hasaki 了!
逻辑运算符
逻辑运算符通常是也是用在判断结构中,比如你需要判定多个条件的时候,就需要用到这个逻辑运算符。还是去网吧,你首先年龄得达到吧,其次你钱得带够吧,无论哪一个条件你不满足,都会被赶出去的。
那么,C语言中支持哪一些逻辑运算符呢?来看下面这个表格:
| 逻辑运算符 | 含义 |
| && | 与,即所有条件同时满足才能执行。 |
| || | 或,即只要其中一个条件满足就可以执行。 |
| ! | 非,取反逻辑状态。即原本条件满足,加上这个符号就不满足了。 |
关于逻辑运算符,后面在判断结构中再详细展开。
位运算符
在计算机中,位是最小的存储单位(bit)。8个bit组成了一个字节(Byte),每个位里面存放的不是 1 就是 0。因此,位运算符主要是针对于二进制的运算。
| 位运算符 | 含义 |
| & | 位与,同时为 1 才为 1. |
| | | 位或,同时为 0 才为 0. |
| ^ | 异或,同为 1 或同为 0,都为 0. |
| ~ | 取反,原本是 1,结果为 0;原本为 0,结果为 1. |
| << | 左移,操作的值向左移动 1 位。 |
| >> | 右移,操作的值向右移动 1 位。 |
先来看一下,位与、位或、异或三个运算符的使用:
| p | q | p&q | p|q | p^q |
| 0 | 0 | 0 | 0 | 0 |
| 1 | 0 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 |
| 0 | 1 | 0 | 1 | 1 |
再来看一下,取反、左移、右移三个运算符的使用。这里设定 a 的值为 60,对应的二进制码为 0011 1100。
| 运算符 | 十进制 | 二进制 | 十进制 | 二进制 |
| ~a | 60 | 0011 1100 | -61 | 1100 0011 |
| a<<2 | 60 | 0011 1100 | 240 | 1111 0000 |
| a>>2 | 60 | 0011 1100 | 15 | 0000 1111 |
左移、右移运算符后面的数值,二进制码向左或者向右移动几位。
杂项运算符
除了以上这些常用的运算符之外,C语言中还有一些特别重要的运算符:
sizeof()
用来返回变量的内存大小。
int a;
sizeof(a); // 4
char c;
sizeof(c); // 1寻址运算符
在前一篇指针文章中有提到这个运算符,&。和位运算符中的位与运算符&长得一样,但是作用是完全不同的。
寻址运算符是加载变量前面,表示变量的内存地址。
int a;
&a; // 00000001int *p;三元运算符
这是一个条件表示,问号前面是一个判断表达式,问号后面则是式子成立和不成立返回的内容。成立将冒号前面的值赋给变量,不成立就将后面的值赋给变量。
int a = 3 > 4 ? 0 : 1;最后
关于运算符的知识就简单的讲到这里了,具体的使用到后面应用过程中有用到,会再次展开说一下。下一篇文章,说一下判断结构。
最后,非常感谢大家的观看。大家的支持,是我写下去的动力!