目录

一、前言

二、运算符分类

三、运算符的优先级

四、常用运算符

1. 算术运算符

2. 关系运算符

3. 逻辑运算符

4. 赋值运算符

5. 条件运算符

6. 逗号运算符

7. 强制类型转换运算符

8. 下标运算符

9. 指针运算符

10. 成员运算符

11. 求字节运算符

12. 位运算符 和 其它

一、前言

C语言主要特点之一:运算符丰富

C语言的运算符包含的范围广泛,共有34种运算符。C语言把括号、逗号、叹号、赋值和强制转换等都作为运算符处理,从而使C语言的运算类型及其丰富,表达式类型多样化。灵活使用运算符可以实现在其他高级语言中难以实现的运算。

基础的C语言运算符是每个程序员都应该学会的,我们非常有必要清晰地知道运算符一共有哪些 和 哪些是需要我们必须掌握的。

这篇文章对C语言常见运算符进行详细讲解,由于在学校写博客的时间少和不方便,所以部分内容我会用我以前用office制作的PPT截图进行分析。

如果文章中有啥错误和分析不到位的地方,希望大家指点 ,谢谢支持,共同进步!!!

二、运算符分类

共12类

运算符种类

运算符

1

算术运算符

+ - * / % ++ --

2

关系运算符

> < == >= <= !=

3

逻辑运算符

! && ||

4

位运算符

<< >> ~ | ^ &

5

赋值运算符

=(及其扩展赋值运算符)

6

条件运算符

? :

7

逗号运算符

,

8

指针运算符

* 和 &

9

求字节运算符

sizeof

10

强制类型转换运算符

(类型)

11

成员运算符

. 和 ->

12

下标运算符

[ ]

13

其它

如函数调用运算符()

【注意】可从一下几个角度大致可将C语言的运算符分为:13类运算符 或 34种运算符,总共有44个运算符。

细心的你会发现上面运算符不够44个,对于第5类运算符:赋值运算符一共有11个。在下面运算符优先级和结合方向表格中会详细介绍。

三、运算符的优先级

运算符的优先级一共可分为15级:

1级优先级最高,15级优先级最低。

同一优先级的运算符(当一个运算对象两侧运算符的优先级别相同时),运算次序由结合方向(结合性)所决定, 除了单目运算符、三目运算符 和 赋值运算符这三种是从右往左外,其他的运算符都是从左往右。

常用运算符常见记法:

! > 算术运算符 > 关系运算符 > && > || > 赋值运算符

优先级

运算符

含义

结合方向

对象个数

1

( )

圆括号

自左至右

1

[ ]

下标运算符

自左至右

1

->

指向结构体成员运算符

自左至右

1

.

结构体成员运算符

自左至右

2

!

逻辑非运算符

自右至左

1(单目运算符)

2

~

按位取反运算符

自右至左

1(单目运算符)

2

++

自增运算符

自右至左

1(单目运算符)

2

- -

自减运算符

自右至左

1(单目运算符)

2

-

负号运算符

自右至左

1(单目运算符)

2

(类型)

类型转换运算符

自右至左

1(单目运算符)

2

*

指针运算符

自右至左

1(单目运算符)

2

&

取地址运算符

自右至左

1(单目运算符)

2

sizeof

长度运算符

自右至左

1(单目运算符)

3

*

乘法运算符

自左至右

2(双目运算符)

3

/

除法运算符

自左至右

2(双目运算符)

3

%

求余运算符

自左至右

2(双目运算符)

4

+

加法运算符

自左至右

2(双目运算符)

4

-

减法运算符

自左至右

2(双目运算符)

5

<<

左移运算符

自左至右

2(双目运算符)

5

>>

右移运算符

自左至右

2(双目运算符)

6

>

大于运算符

自左至右

2(双目运算符)

6

>=

大于等于运算符

自左至右

2(双目运算符)

6

<

小于运算符

自左至右

2(双目运算符)

6

<=

小于等于运算符

自左至右

2(双目运算符)

7

==

等于运算符

自左至右

2(双目运算符)

7

!=

不等于运算符

自左至右

2(双目运算符)

8

&

按位异或运算符

自左至右

2(双目运算符)

9

^

按位与运算符

自左至右

2(双目运算符)

10

|

按位或运算符

自左至右

2(双目运算符)

11

&&

逻辑与运算符

自左至右

2(双目运算符)

12

||

逻辑或运算符

自左至右

2(双目运算符)

13

? :

条件运算符

自右至左

3(三目运算符)

14

=

赋值运算符

自右至左

2(双目运算符)

14

+=

加后赋值

自右至左

2(双目运算符)

14

-=

减后赋值

自右至左

2(双目运算符)

14

*=

乘后赋值

自右至左

2(双目运算符)

14

/=

除后赋值

自右至左

2(双目运算符)

14

%=

去取后赋值

自右至左

2(双目运算符)

14

>>=

左移后赋值

自右至左

2(双目运算符)

14

<<=

右移后赋值

自右至左

2(双目运算符)

14

&=

按位与后赋值

自右至左

2(双目运算符)

14

^=

按位异或后赋值

自右至左

2(双目运算符)

14

|=

按位或后赋值

自右至左

2(双目运算符)

15

,

逗号运算符

自左至右

四、常用运算符

通过上面介绍的内容,接下来开始介绍常见运算符的使用。

1. 算术运算符

运算符与含义

对象个数

结合方向

优先级

++(自增)

1 单目运算符

右→左

2

- - (自减)

1 单目运算符

右→左

2

求圆的面积和周长,球的体积和表面积,圆锥的体积(符号常量)

2. 关系运算符

运算符与含义

对象个数

结合方向

优先级

< (小于)

2 双目运算符

左 → 右

6

<= (小于等于)

2 双目运算符

左 → 右

6

> (大于)

2 双目运算符

左 → 右

6

>= (大于等于)

2 双目运算符

左 → 右

6

== (等于)

2 双目运算符

左 → 右

7

!= (不等于)

2 双目运算符

左 → 右

7

关系运算符常用在条件判断,循环结构等中:

for(i=0; i<10; i++)

if(a < b+c)

if(a != 0) //等同 if(a)

#include

int main()

{

int a=3,b=5,c=1;

printf("b>a = 5>3 结果:%d\n",b>a);

printf("b>a>c = 5>3>1 结果:%d\n",b>a>c);

printf("b>=a = 5>=3 结果:%d\n",b>=a);

printf("b!=a = 5!=3 结果:%d\n",b!=a);

return 0;

}

3. 逻辑运算符

运算符与含义

对象个数

结合方向

优先级

! (逻辑非)

1 单目运算符

右 → 左

2

&& (逻辑或)

2 双目运算符

左 → 右

11

||(逻辑与)

2 双目运算符

左 → 右

12

优先级:! > && > ||

if((year%4==0 && year%100!=0) || (year%400==0))

printf("%d是闰年\n",year);

判断闰年的3种方法(判断+范围输出)

4. 赋值运算符

赋值运算符共有11个:

结合性:从右到左,优先级14

双目(元)运算符

赋值运算符: " = "

复合的赋值运算符(扩展赋值运算符): += 、-= 、*=、/=、 %=、>>=、<<=、&=、|=、^=

1. 赋值运算符: =

变量 = 常数;

a = 3; //将3的值赋给变量a

2. 复合的赋值运算符

a += b; //等价 a = a+b;

x *= y+8; //等价 x = x*(y+8);

x %= 6 //等价 x = x%6;

x %= y+2 //等同 x %= (y+2) 等价 x = x%(y+2);

//注意:不要错写成 x=x%y+2;

5. 条件运算符

条件运算符:? :

结合方向:右 → 左,优先级13

唯一的三目运算符

max = (a>b) ? a: b

#include

int main()

{

int a=66, b=88;

int max;

max = (a>b) ? a: b;

printf("max = %d",max);

}

6. 逗号运算符

结合方向:左 → 右

优先级:15(最低)

7. 强制类型转换运算符

强制类型转换运算符:(类型)

右 → 左,优先级2,单目运算符

8. 下标运算符

下标运算符:[ ]

用处:数组

结合方向:左 → 右

优先级:1

1. 数组名 [下标]

下标:可以是正常量 或 整型表达式

int a[10] //定义一个数组长度为10的数组

a[0] = 66; //对下标为0的元素赋值

void sort(int array[],int n)

//选择排序中,定义sort函数,实参传递方式:地址传递

冒泡排序与选择排序(方法+动画+算法十大排序分类图)

斐波那契数列(Fibonacci)(黄金分割)

9. 指针运算符

指针运算符:& 和 *

结合方向:右 → 左

运算符与含义

对象个数

优先级

&(取地址运算符)

1 单目运算符

2

*(指针运算符)

1 单目运算符

2

【1】取地址运算符:&

&a 是变量a的地址

【2】指针运算符(或称“间接运算符”):*

*p代表指针变量p指向的对象

#include

int main()

{

int a = 666, *p;

p = &a; //使指针变量p 指向 变量a

printf("%d\n",&a); //输出变量a的 地址

printf("%d\n",p); //输出指针变量p指向的 变量a的地址

printf("%d\n",*p); //输出指针变量p指向的 变量a的值

return 0;

}

10. 成员运算符

成员运算符:-> 和 .

运算符与含义

结合方向

优先级

.(结构体成员运算符)

左 → 右

1

->(指向结构体成员运算符)

左 → 右

1

用处:结构体数组(.和结构体指针(->)

成员运算符:-> 和 .

#include

#include

int main()

{

struct Student //声明结构体类型 struct Student

{

int num;

char name[20];

char sex;

float score;

};

struct Student stu; //定义struct Student类型变量 stu

struct Student *p; //定义指向struct Student类型数据的指针变量 p

p = &stu; //p指向 stu

//对结构体成员赋值

stu.num = 10101;

strcpy(stu.name,"Li Lin"); //用字符串复制函数给 stu.name赋值

stu.sex = 'M';

stu.score = 88.8;

//通过 结构体变量名stu 访问它的成员

printf("No.:%d\tname:%s\tsex:%c\tscore:%5.1f\n\n",stu.num, stu.name, stu.sex, stu.score);

//通过 指向结构体变量的指针变量 访问它的成员

printf("No.:%d\tname:%s\tsex:%c\tscore:%5.1f\n\n",(*p).num, (*p).name, (*p).sex, (*p).score);

printf("No.:%d\tname:%s\tsex:%c\tscore:%5.1f\n\n",p->num, p->name, p->sex, p->score);

return 0;

}

如果p指向一个结构体变量stu

下面3种用法等价:

1. stu.成员名 stu.num

2. (*p).成员名 (*p).num

3. p->成员名 p->num

11. 求字节运算符

#include

// 【sizeof】 关键字:统计数据类型所占内存大小

// 语法: sizeof(数据类型)

// 或 sizeof(变量)

// 整型占内存大小比较:short < int <= long <= long long

int main()

{

short a = 10;

printf("short 占用内存空间:%d\n", sizeof(short) );

printf("short 占用内存空间:%d\n", sizeof(a) );

int b = 10;

printf("int 占用内存空间:%d\n", sizeof(int) );

long c = 10;

printf("long 占用内存空间:%d\n", sizeof(long) );

long long d = 10;

printf("long long 占用内存空间:%d\n", sizeof(long long) );

return 0;

}

运行结果……………………………………………………

12. 位运算符 和 其它

① 位运算符: << >> ~ | ^ &

位运算是指以二进制位为对象的运算,指针运算和位运算往往是编写系统软件会常常用到。

参与位运算的对象只能是整型或字符型数据,不能是实型数据。

位运算除了~,其余都是二目(元)运算符

② 函数调用运算符:()

函数调用运算符处于有:指向函数的指针、返回指针的函数

优先级1

int (*p)(int ,int ); //指向函数的指针:定义指向函数的指针变量p

int *a(int x,int y); //返回指针的函数

对于上面两种运算符,我只是看了一遍,并没有深入学习,所以这里就不作详细介绍了。

最后推荐文章:

C语言重要知识点总结【4】:C语言的32个关键字和9种控制语句

C语言重要知识点总结【6】:C语言9种控制语句(详解)

C语言重要知识点总结【7】:C语言中的常量、变量、标识符

C语言重要知识点总结【8】:C语言中变量的数据类型

相见就是【猿分】

希望上面的内容对你能有有所帮助

以上内容如有错误,请大家在评论区指正,谢谢支持,共同进步。 加油!!!

如果你感觉我写的内容对你有一定的帮助,请给我点一个 【赞】作为您对我的鼓励, 谢谢!!

c语言的44种运算符,C语言重要知识点总结【9】:C语言运算符(详解)相关推荐

  1. R语言rms包生存分析之限制性立方样条(RCS, Restricted cubic spline)分析详解实战:拟合连续性自变量和事件风险之间的关系:基于survival包lung数据

    R语言rms包生存分析之限制性立方样条(RCS, Restricted cubic spline)分析详解实战:拟合连续性自变量和事件风险之间的关系:基于survival包lung数据 目录

  2. go语言导入git包_使用go module导入本地包的方法教程详解

    go module 是Go1.11版本之后官方推出的版本管理工具,并且从 Go1.13 版本开始, go module 将是Go语言默认的依赖管理工具.到今天 Go1.14 版本推出之后 Go mod ...

  3. C语言指针面试题解析(万字超多题,每题都有详解)

    目录 零.前言 1.整型数组 2.字符数组 1.strlen函数 2.arr[]={'a','b','c'....}型 1.sizeof()计算 2.strlen()计算 3.char arr[]=& ...

  4. c语言常量的正确表示const,C语言中的const和free用法详解

    注意:C语言中的const和C++中的const是有区别的,而且在使用VS编译测试的时候.如果是C的话,请一定要建立一个后缀为C的文件,不要是CPP的文件.因为,两个编译器会有差别的. 一.C语言中的 ...

  5. z-index失效的几种情况,父标签position属性为relative的时候,详解

    网上对这一方面解释的很多,我也不想把别人的抄过来.在这里是加上我对这些情况的理解还有我的一些疑惑,若有问题,请留言,谢谢!!!话不多说,进入正题: 文章重点:z-index失效的一类情况:父标签pos ...

  6. java播放wma格式的音频文件,两种可将WMA文件在iPhone上播放的方法详解

    WMA是微软开发的一款音频数据压缩技术,也是现今使用非常广泛的音频格式之一.然而,由于它与苹果的iOS系统不兼容,所以该格式文件不能够在苹果系列数码产品如iPhone手机上播放.不过,只要有了方便快捷 ...

  7. c语言因为是汇编语言的一种,. C语言是一种(). A.机器语言B.汇编语言C.中级语言D.高...

    . C语言是(). A.机器语言B.汇编语言C.中级语言D.高级语言2. C语言中大多数语句的结尾必须使用()作为终止符,否则该语句不视为结尾. A.逗号,B. 分号: C.时期. D.冒号: 3 . ...

  8. C语言的变量类型(int、short、char、float...)及变量类型转换详解

    前言 单片机的基本功能是进行数据处理,而数据在进行处理时需要先存放到单片机的存储器中.所以在编写程序时对变量与常量都要先声明数据类型,以便把不同的数据类型定位到嵌入式处理器的不同存储区中. 具有一定格 ...

  9. c语言程序如何调用标准库函数,如何调用C标准库的exit函数详解

    编译大于运算符 原定的计划中这一篇应当是要讲如何编译if表达式的,但是我发现没什么东西可以作为if的test-form的部分的表达式,所以觉得,要不还是先实现一下比较两个数字这样子的功能吧.说干就干, ...

最新文章

  1. 优化算法optimization:AdaDelta
  2. 拿到BAT等大厂offer以后,我发现了关于秋招的一些真相
  3. 【ARM】Tiny4412裸板编程之按键
  4. 测试点2错的来:1033 旧键盘打字 (20分)
  5. android 4.2 noclassdeffounderror,NoClassDefFoundError:android.support.v7.internal
  6. Transformers Assemble(PART IV)
  7. matlab低通滤波器库函数代码_Matlab中模拟低通滤波器的函数
  8. 网络安全系列之五十四 为GRUB引导菜单设置密码
  9. H264格式 I帧 P帧 B帧 基础知识
  10. 大数元科技牵手中央财经大学 助力财税金融体制改革
  11. win10家庭版不能保存关闭密码保护共享
  12. 百度平台上的网络舆情信息怎么搜查的方法
  13. Python编程:从入门到实践pdf
  14. 用HTML+bootstrap制作个人简历
  15. Sil7172中文资料
  16. 聊聊高考分数线和选择
  17. 浅析JWT Attack
  18. 设置无线移动数据连接到服务器,手机怎么修改无线网络dns
  19. 对对碰 代码 android,iOS分段选择器、旅行App、标度尺、对对碰小游戏、自定义相册等源码...
  20. Android字数限制的EditText实现

热门文章

  1. 虚拟机vCPU和vNUMA调整大小-经验法则
  2. Java基础学习总结(137)——Java ClassLoader再总结
  3. Myeclipse学习总结(10)——MyEclipse2014导入项目时The project was not built since its build问题
  4. Spring学习总结(20)——Spring加载多个项目properties配置文件问题解决
  5. Jenkins学习总结(1)——Jenkins详细安装与构建部署使用教程
  6. Get_key.c模块流程
  7. 汇编语言第三章检测题
  8. 神经网络优化(五) - 卷积网络基础
  9. Windows 下使用 MinGW 和 CMake 进行开发
  10. Cmder 设置默认打开目录、解决中文乱码