Lazy loaded image
C语言中的运算符(C06)
字数 4430阅读时长 12 分钟
2025-10-4
2025-10-5
password
comment
type
status
date
slug
summary
tags
category
icon

C语言中的运算符

运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C语言内置了丰富的运算符,并提供了以下类型的运算符:
  • 算术运算符
  • 关系运算符
  • 逻辑运算符
  • 位运算符
  • 赋值运算符
  • 杂项运算符
本章将逐一介绍算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和其他运算符。

算术运算符

下表显示了C语言支持的所有算术运算符。假设变量A的值为 10,变量B的值为 20,则:
运算符
描述
实例
+
把两个操作数相加
A + B将得到30
-
从第一个操作数中减去第二个操作数
A - B将得到-10
*
把两个操作数相乘
A * B将得到200
/
分子除以分母
B / A将得到2
%
取模运算符,整除后的余数
B % A将得到0
++
自增运算符,整数值增加1
A++将得到11
--
自减运算符,整数值减少1
A--将得到9

实例

请看下面的实例,了解C语言中所有可用的算术运算符:
当上面的代码被编译和执行时,它会产生下列结果:
 
以下实例演示了a++++a的区别:
当上面的代码被编译和执行时,它会产生下列结果:

关系运算符

下表显示了C语言支持的所有关系运算符。假设变量A的值为10,变量B的值为20,则:
运算符
描述
实例
==
检查两个操作数的值是否相等,如果相等则条件为真。
(A == B)为假。
!=
检查两个操作数的值是否相等,如果不相等则条件为真。
(A != B)为真。
>
检查左操作数的值是否大于右操作数的值,如果是则条件为真。
(A > B)为假。
<
检查左操作数的值是否小于右操作数的值,如果是则条件为真。
(A < B)为真。
>=
检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。
(A >= B)为假。
<=
检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。
(A <= B)为真。

实例

请看下面的实例,了解C语言中所有可用的关系运算符:
当上面的代码被编译和执行时,它会产生下列结果:

逻辑运算符

下表显示了C语言支持的所有关系逻辑运算符。假设变量A的值为1,变量B的值为0,则:
运算符
描述
实例
&&
称为逻辑与运算符。如果两个操作数都非零,则条件为真。
(A && B)为假。
||
称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。
(A || B)为真。
!
称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。
!(A && B)为真。

实例

请看下面的实例,了解C语言中所有可用的逻辑运算符:
当上面的代码被编译和执行时,它会产生下列结果:

位运算符

位运算符作用于位,并逐位执行操作。&|^的真值表如下所示:
p
qq
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语言支持的位运算符。假设变量A的值为 60,变量B的值为13,则:
运算符
描述
实例
&
对两个操作数的每一位执行逻辑与操作,如果两个相应的位都为1,则结果为1,否则为0。 按位与操作,按二进制位进行"与"运算。运算规则: 0&0=0; 0&1=0; 1&0=0; 1&1=1;
(A & B)将得到12,即为 0000 1100
|
对两个操作数的每一位执行逻辑或操作,如果两个相应的位都为0,则结果为0,否则为1。 按位或运算符,按二进制位进行"或"运算。运算规则: 0|0=0; 0|1=1; 1|0=1; 1|1=1;
(A | B)将得到61,即为 0011 1101
^
对两个操作数的每一位执行逻辑异或操作,如果两个相应的位值相同,则结果为0,否则为1。 异或运算符,按二进制位进行"异或"运算。运算规则: 0^0=0; 0^1=1; 1^0=1; 1^1=0;
(A ^ B)将得到49,即为 0011 0001
~
对操作数的每一位执行逻辑取反操作,即将每一位的0变为1,1变为0。 取反运算符,按二进制位进行"取反"运算。运算规则: ~1=-2; ~0=-1;
(~A)将得到-61,即为 1100 0011,一个有符号二进制数的补码形式。
<<
将操作数的所有位向左移动指定的位数。左移n位相当于乘以2的n次方。 二进制左移运算符。将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。
A<<2将得到240,即为 1111 0000
>>
将操作数的所有位向右移动指定的位数。右移n位相当于除以2的n次方。 二进制右移运算符。将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。
A>>2将得到15,即为 0000 1111

实例

请看下面的实例,了解C语言中所有可用的位运算符:
当上面的代码被编译和执行时,它会产生下列结果:

赋值运算符

下表列出了 C 语言支持的赋值运算符:
运算符
描述
实例
=
简单的赋值运算符,把右边操作数的值赋给左边操作数
C = A + B将把A + B的值赋给C
+=
加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数
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 |= 2等同于C = C | 2

实例

请看下面的实例,了解C语言中所有可用的赋值运算符:
当上面的代码被编译和执行时,它会产生下列结果:

杂项运算符 ↦ sizeof & 三元

下表列出了C语言支持的其他一些重要的运算符,包括sizeof?:
运算符
描述
实例
sizeof()
返回变量的大小。
sizeof(a)将返回4,其中a是整数。
&
返回变量的地址。
&a;将给出变量的实际地址。
*
指向一个变量。
*a;将指向一个变量。
?:
条件表达式
如果条件为真 ?则值为X:否则值为Y

实例

请看下面的实例,了解C语言中所有可用的杂项运算符:
当上面的代码被编译和执行时,它会产生下列结果:

C语言中的运算符优先级

运算符的优先级确定表达式中项的组合。这会影响到一个表达式如何计算。某些运算符比其他运算符有更高的优先级,例如,乘除运算符具有比加减运算符更高的优先级。
例如x = 7 + 3 * 2,在这里,x被赋值为13,而不是20,因为运算符*具有比+更高的优先级,所以首先计算乘法3*2,然后再加上7
下表将按运算符优先级从高到低列出各个运算符,具有较高优先级的运算符出现在表格的上面,具有较低优先级的运算符出现在表格的下面。在表达式中,较高优先级的运算符会优先被计算。
类别
运算符
结合性
后缀
() [] -> . ++ --
从左到右
一元
+ - ! ~ ++ -- (type)* & sizeof
从右到左
乘除
* / %
从左到右
加减
+ -
从左到右
移位
<< >>
从左到右
关系
< <= > >=
从左到右
相等
== !=
从左到右
位与 AND
&
从左到右
位异或 XOR
^
从左到右
位或 OR
|
从左到右
逻辑与 AND
&&
从左到右
逻辑或 OR
||
从左到右
条件
?:
从右到左
赋值
= += -= *= /= %= >>= <<= &= ^= |=
从右到左
逗号
,
从左到右

实例

请看下面的实例,了解 C 语言中运算符的优先级:
当上面的代码被编译和执行时,它会产生下列结果:
上一篇
C语言的存储类(C05)
下一篇
C语言中的判断结构(C07)

评论
Loading...