C语言 运算符

运算符优先级别

优先级

运算符

名称或含义

使用形式

结合方向

说明

1

[]

数组下标

数组名[常量表达式]

左到右

--

()

圆括号

(表达式)/函数名(形参表)

--

.

成员选择(对象)

对象.成员名

--

->

成员选择(指针)

对象指针->成员名

--

 

2

-

负号运算符

-表达式

右到左

单目运算符

~

按位取反运算符

~表达式

++

自增运算符

++变量名/变量名++

--

自减运算符

--变量名/变量名--

*

取值运算符

*指针变量

&

取地址运算符

&变量名

!

逻辑非运算符

!表达式

(类型)

强制类型转换

(数据类型)表达式

--

sizeof

长度运算符

sizeof(表达式)

--

 

3

/

表达式/表达式

左到右

双目运算符

*

表达式*表达式

%

余数(取模)

整型表达式%整型表达式

4

+

表达式+表达式

左到右

双目运算符

-

表达式-表达式

5

<< 

左移

变量<<表达式

左到右

双目运算符

>> 

右移

变量>>表达式

 

6

> 

大于

表达式>表达式

左到右

双目运算符

>=

大于等于

表达式>=表达式

< 

小于

表达式<表达式

<=

小于等于

表达式<=表达式

7

==

等于

表达式==表达式

左到右

双目运算符

=

不等于

表达式!= 表达式

 

8

&

按位与

表达式&表达式

左到右

双目运算符

9

^

按位异或

表达式^表达式

左到右

双目运算符

10

|

按位或

表达式|表达式

左到右

双目运算符

11

&&

逻辑与

表达式&&表达式

左到右

双目运算符

12

||

逻辑或

表达式||表达式

左到右

双目运算符

 

13

?:

条件运算符

表达式1?

表达式2: 表达式3

右到左

三目运算符

 

14

=

赋值运算符

变量=表达式

右到左

--

/=

除后赋值

变量/=表达式

--

*=

乘后赋值

变量*=表达式

--

%=

取模后赋值

变量%=表达式

--

+=

加后赋值

变量+=表达式

--

-=

减后赋值

变量-=表达式

--

<<=

左移后赋值

变量<<=表达式

--

>>=

右移后赋值

变量>>=表达式

--

&=

按位与后赋值

变量&=表达式

--

^=

按位异或后赋值

变量^=表达式

--

|=

按位或后赋值

变量|=表达式

--

 

15

逗号运算符

表达式,表达式,…

左到右

--

常用运算符分类

运算符类型

作用

算术运算符

用于处理四则运算

赋值运算符

用于将表达式的值赋给变量

比较运算符

用于表达式的比较,并返回一个真值或假值

逻辑运算符

用于根据表达式的值返回真值或假值

位运算符

用于处理数据的位运算

sizeof运算符

用于求字节数长度

算术运算符

注意事项

  • 1、0 不能作为除数。
  • 2、取余只能对整形操作。
  • 3、++a:先自己进行+1在计算表达式结果(推荐使用)
  • 4、a++:先进行表达式结果赋值变量,在进行+1
  • 5、二义性:同时在一个表达式中存在 ++a --a、不同系统可能会不同。
  • 6、所有非0的值都是真值
  • 7、单目运算符高于双目运算符

运算符表

运算符

术语

示例

结果

+

正号

+3

3

-

负号

-3

-3

+

10 + 5

15

-

10 - 5

5

*

10 * 5

50

/

10 / 5

2

%

取模(取余)

10 % 3

1

++

前自增

a=2; b=++a;

a=3; b=3;

++

后自增

a=2; b=a++;

a=3; b=2;

--

前自减

a=2; b=--a;

a=1; b=1;

--

后自减

a=2; b=a--;

a=1; b=2;

赋值运算符

赋值运算符表

运算符

术语

示例

结果

=

赋值

a=2; b=3;

a=2; b=3;

+=

加等于

a=0; a+=2;

a=2;

-=

减等于

a=5; a-=3;

a=2;

*=

乘等于

a=2; a*=2;

a=4;

/=

除等于

a=4; a/=2;

a=2;

%=

模等于

a=3; a%2;

a=1;

 案例

C语言 运算符_赋值C语言 运算符_双目运算符_02
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

int main(void)
{
    int a = 10;
    // 赋值简单写法、a = a + 5; 相同。
    a += 5;
    // 取模赋值简单写法、a=a % 5;
    a %= 5;
    // 赋值简单写法、a = a * 5; 相同。
    a *= 5;
    // 取模赋值简单写法、a=a / 5;
    a /= 5;
    printf("%d\n", a);
    return 0;
}
赋值运算符 使用案例

比较运算符

比较运算符表

C 语言的比较运算中,用数字“1”来表示,用数字“0”来表示。

运算符

术语

示例

结果

==

相等于

4 == 3

0

!=

不等于

4 != 3

1

小于

4 < 3

0

大于

4 > 3

1

<=

小于等于

4 <= 3

0

>=

大于等于

4 >= 1

1

案例

C语言 运算符_赋值C语言 运算符_双目运算符_02
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

int main(void)
{
    // 比较计算真假值
    int a = 10;
    int b = 20;
    int c = 10;
    // 假:0
    printf("%d\n", a == b);
    // 真:1
    printf("%d\n", a != b);
    // 假:0
    printf("%d\n", a >= b);
    // 以此类推....
    printf("%d\n", a <= b);
    printf("%d\n", a = b);
    printf("%d\n", a < b);
    printf("%d\n", a > b);

    // 运用其他公式、c为1真值
    printf("%d\n", c = ++a <= b * 2);
    return 0;
}
比较运算符 使用案例

逻辑运算符

逻辑运算符表

运算符

术语

示例

结果

!

!a

如果a为假,则!a为真;

如果a为真,则!a为假。

&&

a && b

如果ab都为真,则结果为真,否则为假。

||

a || b

如果ab有一个为真,则结果为真,二者都为假时,结果为假。

案例

C语言 运算符_赋值C语言 运算符_双目运算符_02
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

int main(void)
{
    int a = 10;
    int b = 20;
    
    // !非:假0、非真为假,非假为真
    printf("%d\n",!a);
    // 真1
    printf("%d\n", !!a);
    // &&与:真1、同真为真,其余为假
    printf("%d\n", a && b);
    // 假0:!a为单目运算符,高于双目运算符(前后都有表达式)
    printf("%d\n", !a && b);
    // ||或:表达式、同假为假,其余为真
    printf("%d\n", a || b);
    // 运算符:优先级
    int c = a++ + b || c-- * c && !b + ++c;

    return 0;
}
逻辑运算符 使用案例