2026/07/29 C语言的运算符
C语言的运算符就是C语言的"标点符号",具有独立的语法和词法。
运算符指明要进行的运算和操作,操作数是指运算符的操作对象,根据运算符操作数的数目不同,C语言标准把运算符分为三种:单目运算符(一元运算符)、双目运算符(二元运算符)、三目运算符(三元运算符)。
(1)算术运算符
C语言中提供了7种算术运算符,分别是 + - * / % ++ -- ,其中++和--都属于单目运算符,使用的时候比较特殊,其他五种都属于双目运算符。
加法运算符+和减法运算符-一般没有特别需要注意的,作为双目运算符,需要两个操作对象,但是有时候 - 也会作为负号使用就变为单目运算符,使用规则发生变化。
*和/是作为乘法运算符和除法运算符,属于双目运算符,但是除法运算符的使用规则有些不同。
当除法运算符两端的操作数都是整数的时候,得到的结果也是整数,当两个操作数无法被整数,会舍弃小数,只保留整数。
当除法运算符两端的操作数不全是整数,比如其中一个操作数是浮点数,则得到的结果也是浮点数,如果不指定精度,则默认是6位精度。
C语言中提供%作为求余运算符,也可以称为取模运算符,C语言标准中规定%符号两端的操作数必须是整数。
C语言中提供了两个增量运算符++和--,属于单目运算符,只能在变量中使用,一般可以作为变量的后缀增量或者后缀减量,++和--也被称为自加运算符和自减运算符,注意:C语言标准中规定++和--也可以作为变量的前缀增量和前缀减量。 作用是让变量的值自动加1或者减1。
a++ :在表达式中则表示先让变量a参与表达式运算,运算之后才会让变量a的值自加
++a :在表达式中则表示先让变量a的值自加,自加之后再参与表达式运算
可由以下代码验证:
#include <stdio.h>
int main(int argc, char const *argv[])
{
int a,b,c,d;
a=10;
b=a++; //赋值之后a自增,即b=10,a=11
c=++a; //a自增之后再赋值,即a=12,c=12
d=10*a++; //a参与运算之后再自增,即d=120,a=13
printf("a=%d,b=%d,c=%d,d=%d\n",a,b,c,d);
return 0;
}
运行结果:

(2)位操作运算符
C语言中提供了6种位操作运算符,分别是 ~ & ^ | << >>,其中~属于单目运算符,其他五种都属于双目运算符。
~:按位取反,对于二进制数而言,0变为1,1变为0 (~ 1101_1110 = 0010_0001)
&:按位与,对于二进制而言,当两个bit同时为1,则结果为1,如果bit存在0,结果为0
|:按位或,对于二进制而言,当两个bit同时为0,则结果为0,如果bit存在1,结果为1
^:按位异或,对于二进制而言,当两个bit相同,则结果为0,两个bit不同,则结果为1
'<<':左移运算符,对于二进制而言原则:高位舍弃、低位补0 0111_1010 << 3 -- 1101 0000
'>>':右移运算符,对于二进制而言原则:低位舍弃、高位补0 0111_1010 >> 3 -- 0000 1111
按位与和按位或常用于置位和复位
eg:给定一个整型变量a,第一个设置a的bit 3,第二个清除a的bit3。在以上两个操作中,要保持其它位不变。
#include <stdio.h>
int main(int argc, char const *argv[])
{
int a = 15;
printf("a的8位二进制 = ");
// 从第7位(最高位) 遍历到 第0位(最低位)
for (int bit = 7; bit >= 0; bit--)
{
// 将bit位移到最低位,和1相与,取出当前位
if( (a >> bit) & 1 )
printf("1");
else
printf("0");
}
printf("\n");
a &= (~(1 << 3)); //第三位清零
printf("a的8位二进制 = ");
// 从第7位(最高位) 遍历到 第0位(最低位)
for (int bit = 7; bit >= 0; bit--)
{
// 将bit位移到最低位,和1相与,取出当前位
if( (a >> bit) & 1 )
printf("1");
else
printf("0");
}
printf("\n");
a |= (1<<3); //第三位置位
printf("a的8位二进制 = ");
// 从第7位(最高位) 遍历到 第0位(最低位)
for (int bit = 7; bit >= 0; bit--)
{
// 将bit位移到最低位,和1相与,取出当前位
if( (a >> bit) & 1 )
printf("1");
else
printf("0");
}
printf("\n");
return 0;
}
运行结果:

(3)关系运算符
C语言中一共提供了6种关系运算符,分别是 < <= > >= == != ,关系运算符都是双目运算符,都遵循左结合性,一般用在条件判断中,如果表达式中使用关系运算符,则表达式也被称为关系表达式,关系表达式的结果只有两种,用户可以使用布尔型进行结果的表示。
关系运算符 < <= > >=的优先级相同的,并且这四种运算符是高于关系运算符 == !=,两者的优先级是相同的。
(4)逻辑运算符
C语言中提供了3种逻辑运算符,分别是 && || ! ,对于逻辑与&&和逻辑或||都属于双目运算符,遵循左结合性,而逻辑非!属于单目运算符,遵循右结合性。一般表达式中如果使用了逻辑运算符,则表达式被称为逻辑表达式。
(5)条件运算符
C语言中提供了1种条件运算符,符号是 ? : ,条件运算符是唯一的一个三目运算符,需要三个操作数。
第一个操作对象是条件,当第一个操作对象为真时,则执行第二个操作对象,当第一个操作对象为假时,则执行第三个操作对象。
(6)赋值运算符
C语言中提供了11种赋值运算符,如下所示,都属于双目运算符,但是遵循右结合性!!!

(7)逗号运算符
C语言中提供了1种逗号运算符,符号是 , 作用是把多个表达式连在一起,构成一个大的表达式,也被称为逗号表达式。注意按照从左向右的流程对每个表达式进行运算,只是逗号表达式最终结果是最后一个表达式的结果。
运算符优先级
可以知道,C语言中的运算符是有优先级的,运算符的优先级指的是多个运算符出现在同一个表达式中,优先执行哪个运算符,可以知道算术运算符* / %的优先级是高于算术运算符+和-。
优先级由高到低:数组 括号->单目(非赋值)->乘除余->加减->移位->关系->位操作->条件运算符->赋值运算符->逗号运算符
运算符结合性
C语言中的运算符是有结合性的,运算符的结合性指的是多个优先级相同的运算符出现在同一个表达式中,优先执行哪个运算符。
运算符的结合性分为两种:一种是左结合性,遵循先左后右原则,比如 a + b - c,相当于(a+b)-c,另一种是右结合性,遵循先右后左原则,比如双目运算符中的赋值运算符 = ,比如表达式a=b=c,相当于a=(b=c)。
注意:C语言中的单目运算符和三目运算符都是遵循右结合性,当然也包含双目运算符中的赋值运算符=,其他的运算符都遵循左结合性。
作者:bbzhu04@gmail.com ,多有不妥之处,望批评指正
本文原创,欢迎转载;转载请在文章显著位置标明原文链接: href="https://www.cnblogs.com/zhubb/p/22076205"
保留所有权限,未经许可禁止篡改、商用发布。

浙公网安备 33010602011771号