C 语言 - 运算符
运算符是一种告诉编译器执行特定的数学或逻辑操作的符号,在 C 语言中内置了丰富的运算符。包括:
运算符 | 描述 |
---|---|
算术运算符 | 算术运算符是对数值类型的变量进行运算的,比如:加、减、乘、除和取模。 |
赋值运算符 | 赋值运算符是对已存在的变量进行重新设置新值的运算符。 |
关系运算符 | 关系运算符的结果都是布尔型,也就是要么是真,要么是假。 |
逻辑运算符 | 逻辑运算符是用于连接多个条件(一般是关系表达式),最终的结果也是一个布尔值。 |
位运算符 | 位运算符主要是用于数值类型的二进制的运算。 |
指针运算符 | 其他运算符主要是对指针变量的操作,涉及到取变量的地址(& )和获取指针变量的值(* )。 |
sizeof 运算符 | sizeof 运算符用于计算一个变量或者数据类型占用的内存的字节数。 |
算术运算符
在 C 语言中,算术运算符是对数值类型的变量进行运算的,比如:加、减、乘、除和取模。
下表列出了 C 语言支持的算术运算符:
运算符 | 说明 | 示例 | 结果 |
---|---|---|---|
+ | 正号 | +3 | 3 |
- | 负号 | -4 | -4 |
+ | 加法运算 | 5 + 5 | 10 |
- | 减法运算 | 10 - 5 | 5 |
* | 乘法运算 | 5 * 2 | 10 |
/ | 除法运算 | 10 / 3 | 3 |
% | 取模运算(整除后的余数) | 10 % 3 | 1 |
++ | 自增运算(整数值增加 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 |
为了更好的理解位运算,请看下面真值表。
p | q | p 与 q | p 或 q | p 亦或 q |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
假设如果 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 + B | C = A + B |
+= | 相加后再赋值 | 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 |
二进制运算
运算符 | 说明 | 示例 | 等效 |
---|---|---|---|
<<= | 左移后赋值 | C <<= 2 | C = C << 2 |
>>= | 右移后赋值 | C >>= 2 | C = C >> 2 |
&= | 按位与后赋值 | C &= 2 | C = C & 2 |
^= | 按位异或后赋值 | C ^= 2 | C = C ^ 2 |
` | =` | 按位或后赋值 | `C |
指针运算符
在 C 语言中,指针运算符主要包括取地址运算符 &
和取值运算符 *
。
运算符 | 说明 | 示例 |
---|---|---|
& | 返回变量的地址 | &A |
* | 获取指针变量对应的值 | *A |
杂项运算符
除了上面的运算符,C 语言还支持成员运算符、sizeof 运算符、三目运算符等等,都归为杂项运算符这一类。
下表列出了 C 语言支持的其他一些重要的运算符:
运算符 | 描述 | 示例 |
---|---|---|
sizeof | 返回变量的大小 | sizeof(type); sizeof(varname); |
? X : Y | 条件运算符。如果 Condition 为真 ? 则值为 X : 否则值为 Y | max = a > b ? a : b; |
, | 逗号运算符。逗号表达式的值是以逗号分隔的列表中的最后一个表达式的值 | |
. 和 -> | 成员运算符,用于引用类、结构和共用体的成员 | student.age; student->age; |