跳到主要内容

C 语言 - 运算符

运算符是一种告诉编译器执行特定的数学或逻辑操作的符号,在 C 语言中内置了丰富的运算符。包括:

运算符描述
算术运算符算术运算符是对数值类型的变量进行运算的,比如:加、减、乘、除和取模。
赋值运算符赋值运算符是对已存在的变量进行重新设置新值的运算符。
关系运算符关系运算符的结果都是布尔型,也就是要么是真,要么是假。
逻辑运算符逻辑运算符是用于连接多个条件(一般是关系表达式),最终的结果也是一个布尔值。
位运算符位运算符主要是用于数值类型的二进制的运算。
指针运算符其他运算符主要是对指针变量的操作,涉及到取变量的地址(&)和获取指针变量的值(*)。
sizeof 运算符sizeof 运算符用于计算一个变量或者数据类型占用的内存的字节数。

算术运算符

在 C 语言中,算术运算符是对数值类型的变量进行运算的,比如:加、减、乘、除和取模。

下表列出了 C 语言支持的算术运算符:

运算符说明示例结果
+正号+33
-负号-4-4
+加法运算5 + 510
-减法运算10 - 55
*乘法运算5 * 210
/除法运算10 / 33
%取模运算(整除后的余数)10 % 31
++自增运算(整数值增加 1)a = 2; a++3
--自减运算(整数值减少 1)a = 10; a--9

注意:如果是整数之间做除法运算(/)时,只保留整数部分而舍弃小数部分。

前自增与后自增

在 C 语言中,自增运算符(++)与自减运算符(--)都是有前自增与后自增、前自减和后自减的区别的。

  • 前自增与后自增的区别是前自增是先自增后赋值,后自增是先赋值后自增。
  • 前自减与后自减的区别是前自减是先自减后赋值,后自减是先赋值后自减。

例如:

int a = 0; int b = a++;  // 结果:a = 1, b = 0
int a = 0; int b = ++a; // 结果:a = 1, b = 1

关系运算符

关系运算符也称为“比较运算符”。在 C 语言中,关系运算符的结果要么是真,要么是假。关系表达式经常用在条件判断语句或循环语句中。

下表列出了 C 语言支持的关系运算符:

运算符说明示例结果
==相等4 == 3假,也就是 0
!=不等于4 != 3真,也就是 1
<小于4 < 3假,也就是 0
>大于4 > 3真,也就是 1
<=小于等于4 <= 3假,也就是 0
>=大于等于4 >= 3真,也就是 1

逻辑运算符

在 C 语言中,逻辑运算符是用于连接多个条件(一般来讲就是关系表达式),最终的结果也是返回真或假,即 true 和 false。

下表列出了 C 语言支持的逻辑运算符:

运算符说明示例
&&逻辑与A && B
||逻辑或A || B
!逻辑非!A

位运算符

在 C 语言中,位运算符主要是用于数值类型的二进制的运算。位运算符作用于位,并逐位执行操作,主要有与、或、非、亦或等操作。

下表列出了 C 语言中的位运算符:

运算符说明示例
&按位与A & B
|按位或A | B
^按位异或A ^ B
<<左移运算符A << 2
>>右移运算符A >> 2

为了更好的理解位运算,请看下面真值表。

pqp 与 qp 或 qp 亦或 q
00000
01011
11110
10011

假设如果 A = 60,且 B = 13,现在以二进制格式表示,它们如下所示:

A      = 0011 1100
B = 0000 1101
-----------------
A & B = 0000 1100 // 与
A | B = 0011 1101 // 或
A ^ B = 0011 0001 // 亦或
~ A = 1100 0011 // 非

赋值运算符

在 C 语言中,赋值运算符是对已存在的变量进行重新设置新值的运算符。除了使用等号(=)赋值,C 语言还允许其他运算符号与等号连接使用,比如算数运算符和位运算符。因此赋值运算符可分为两组,即十进制运算和二进制运算。

十进制运算

运算符说明示例等效
=将一个表达式的值赋给另一个C = A + BC = A + B
+=相加后再赋值C += AC = C + A
-=相减后再赋值C -= AC = C - A
*=相乘后再赋值C *= AC = C * A
/=相除后再赋值C /= AC = C / A
%=求余后再赋值C %= AC = C % A

二进制运算

运算符说明示例等效
<<=左移后赋值C <<= 2C = C << 2
>>=右移后赋值C >>= 2C = C >> 2
&=按位与后赋值C &= 2C = C & 2
^=按位异或后赋值C ^= 2C = C ^ 2
`=`按位或后赋值`C

指针运算符

在 C 语言中,指针运算符主要包括取地址运算符 & 和取值运算符 *

运算符说明示例
&返回变量的地址&A
*获取指针变量对应的值*A

杂项运算符

除了上面的运算符,C 语言还支持成员运算符、sizeof 运算符、三目运算符等等,都归为杂项运算符这一类。

下表列出了 C 语言支持的其他一些重要的运算符:

运算符描述示例
sizeof返回变量的大小sizeof(type);
sizeof(varname);
? X : Y条件运算符。如果 Condition 为真 ? 则值为 X : 否则值为 Ymax = a > b ? a : b;
,逗号运算符。逗号表达式的值是以逗号分隔的列表中的最后一个表达式的值
.->成员运算符,用于引用类、结构和共用体的成员student.age;
student->age;