C语言为我们提供了各种各样的运算符,我们可以用它们来对数据进行操作。
特别是,我们可以确定各种运算符组。
- 算术运算符
- 比较运算符
- 逻辑运算符
- 复合赋值运算符
- 位运算符
- 指针运算符
- 结构运算符
- 杂项运算符
在这篇博文中,我将以2个虚数变量a 和b 为例,详细介绍所有这些运算符。
我将位运算符、结构运算符和指针运算符排除在这个列表之外,因为我将为它们专门写一篇博文。
算术运算符
在这个宏组中,我将把二进制运算符和单进制运算符分开。
二进制运算符使用两个操作数工作。
| 运算符 | 名称 | 例子 |
|---|---|---|
= | 赋值 | a = b |
+ | 加法 | a + b |
- | 减法 | a - b |
* | 乘法 | a * b |
/ | 除法 | a / b |
% | 调和 | a % b |
单项运算符只接受一个操作数。
| 操作符 | 运算符名称 | 例子 |
|---|---|---|
+ | 单元加号 | +a |
- | 一级减法 | -a |
++ | 递增 | a++ 或++a |
-- | 递减 | a-- 或--a |
a++ 和++a 之间的区别是:a++ 在使用后会增加a 变量。++a 在使用前会增加a 变量。
比如说。
int a = 2;
int b;
b = a++ /* b is 2, a is 3 */
b = ++a /* b is 4, a is 4 */
这同样适用于递减运算符。
比较运算符
| 操作符 | 名称 | 例子 |
|---|---|---|
== | 等价运算符 | a == b |
!= | 不等运算符 | a != b |
> | 大于 | a > b |
< | 小于 | a < b |
>= | 大于或等于 | a >= b |
<= | 小于或等于 | a <= b |
逻辑运算符
!不(例如: )!a&&和(例如: )a && b||OR (例如: )a || b
这些运算符在处理布尔值时非常有用。
复合赋值运算符
这些运算符在执行赋值的同时,还可以执行算术运算。
| 操作符 | 名称 | 例子 |
|---|---|---|
+= | 加法赋值 | a += b |
-= | 减法赋值 | a -= b |
*= | 乘法运算 | a *= b |
/= | 除法作业 | a /= b |
%= | 摩尔赋值 | a %= b |
杂项运算符
三元运算符
三元运算符是C语言中唯一一个可以处理3个操作数的运算符,它是表达条件的一种简短方式。
它的样子是这样的。
<condition> ? <expression> : <expression>
例子。
如果a 被评估为true ,那么b 语句将被执行,否则c 。
三元运算符在功能上与if/else条件相同,只是它的表达方式更短,而且可以内联到一个表达式中。
sizeof
sizeof 操作符返回你传递的操作数的大小。你可以传递一个变量,甚至是一个类型。
使用实例。
#include <stdio.h>
int main(void) {
int age = 37;
printf("%ld\n", sizeof(age));
printf("%ld", sizeof(int));
}
操作符优先级
有了所有这些操作符(还有更多,我在这篇文章中没有涉及,包括位操作符、结构操作符和指针操作符),我们在一个表达式中一起使用它们时必须注意。
假设我们有这样的操作。
int a = 2;
int b = 4;
int c = b + a * a / b - a;
c 的值是多少?我们会在乘法和除法之前执行加法吗?
有一套规则可以帮助我们解决这个难题。
按照从低级到高级的顺序,我们有。
=赋值运算符+和-二进制运算符*和/操作符+和-单元运算符
操作符也有一个关联性规则,除了单数操作符和赋值之外,总是从左到右。
在。
int c = b + a * a / b - a;
我们首先执行a * a / b ,由于是从左到右,我们可以把它分成a * a 和结果/ b:2 * 2 = 4,4 / 4 = 1 。
然后我们就可以进行和与减的运算。4 + 1 - 2。c 的值是3 。
然而,在所有情况下,我想确保你意识到你可以使用括号来使任何类似的表达式更容易阅读和理解。
小括号的优先级高于其他任何东西。
上面的例子表达式可以改写为。
int c = b + ((a * a) / b) - a;
而且我们不必考虑那么多。