C语言重要知识点总结【9】:C语言运算符(详解)

您所在的位置:网站首页 c语言中的括号运算符 C语言重要知识点总结【9】:C语言运算符(详解)

C语言重要知识点总结【9】:C语言运算符(详解)

2024-07-16 00:57| 来源: 网络整理| 查看: 265

目录 一、前言二、运算符分类三、运算符的优先级四、常用运算符1. 算术运算符2. 关系运算符3. 逻辑运算符4. 赋值运算符5. 条件运算符6. 逗号运算符7. 强制类型转换运算符8. 下标运算符9. 指针运算符10. 成员运算符11. 求字节运算符12. 位运算符 和 其它

一、前言

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

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

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

这篇文章对C语言常见运算符进行详细讲解,由于在学校写博客的时间少和不方便,所以部分内容我会用我以前用office制作的PPT截图进行分析。 如果文章中有啥错误和分析不到位的地方,希望大家指点 ,谢谢支持,共同进步!!!

二、运算符分类 共12类运算符种类运算符1算术运算符+ - * / % ++ --2关系运算符> = 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(单目运算符)2sizeof长度运算符自右至左1(单目运算符)3*乘法运算符自左至右2(双目运算符)3/除法运算符自左至右2(双目运算符)3%求余运算符自左至右2(双目运算符)4+加法运算符自左至右2(双目运算符)4-减法运算符自左至右2(双目运算符)5右移运算符自左至右2(双目运算符)6>大于运算符自左至右2(双目运算符)6>=大于等于运算符自左至右2(双目运算符)6=左移后赋值自右至左2(双目运算符)14a); 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双目(元)运算符赋值运算符: " = "复合的赋值运算符(扩展赋值运算符): += 、-= 、*=、/=、 %=、>>=、b) ? a: b; printf("max = %d",max); }

在这里插入图片描述

在这里插入图片描述

使用条件运算符需要注意的有一点: 例题: 设 x = 2,y = 3,z = 4,k = 5,则表达式“x < y ? x++ : z < k ? x : k”的值是( ) A. 1 B.2 C.3 D.4 分析:首先条件运算符的结合方向是:右 → 左,即可以写成 (x < y ? x++ : z < k) ? x : k 这种形式;先计算 x < y ? x++ : z 结果为真,然后再计算 x++ ? x : k;虽然结合方向是从右到左,但运算时是从左到右计算的。 但是这题需要注意的是 x++ ? x : k 的结果是 x = 2,原因是x现参与条件运算,然后++ 结果:B

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


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3