c语言---操作符(详解)

这篇具有很好参考价值的文章主要介绍了c语言---操作符(详解)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、操作符的分类

算术操作符: + 、- 、*、/ 、%
移位操作符: << >>
位操作符: & | ^ `
赋值操作符: = 、+= 、 -= 、 = 、 /= 、%= 、<<= 、>>= 、&= 、|= 、^=
单⽬操作符: !、++、–、&、
、+、-、~ 、sizeof、(类型)
关系操作符: > 、>= 、< 、<= 、 == 、 !=
逻辑操作符: && 、||
条件操作符: ? :
逗号表达式: ,
下标引⽤: []
函数调⽤: ()
结构成员访问: . 、->

二、算术操作符

c语言---操作符(详解),c语言,c语言

三、 移位操作符

3.1<<左移操作符

3.1.1移位规则

左边抛弃,右边补0。

3.1.2直接上代码以及解释

#include<stdio.h>
int main()
{
	int a = 6;
	int b = a << 1;
	printf("%d\n", a);
	printf("%d\n", b);
	return 0;
}

运行结果:
c语言---操作符(详解),c语言,c语言
数据存放内存中其实存放的是补码。
c语言---操作符(详解),c语言,c语言
如果改成a=-6,那么结果如何呢?
直接上代码:

#include<stdio.h>
int main()
{
	int a = -6;
	int b = a << 1;
	printf("%d\n", a);
	printf("%d\n", b);
	return 0;
}

运行结果:
c语言---操作符(详解),c语言,c语言
c语言---操作符(详解),c语言,c语言

3.2>> 右移操作符

3.2.1移位规则

首先右移运算分两种:
1.逻辑右移:左边用0填充,右边丢弃。
2.算术右移:左边用原该值的符号位填充,右边丢弃。
其次右移到底是算术右移,还是逻辑右移取决于编译器的实现,常见的编译器都是算术右移。

3.2.2画图解释

c语言---操作符(详解),c语言,c语言

3.3注意

1.移位操作符的操作数只能是整数,移动的是二进制。
2.不要移动负数位,这是未定义的,例如:

int num = 10;
num>>-1;//error

四、位操作符:&、|、^、~

操作的是二进制位。

& //按位与
|//按位或
^//按位异或
~//按位取反

4.1&按位与

4.1.1按位与的计算逻辑

相同为1,不同为0。

4.1.2代码

#include<stdio.h>
int main()
{
	int a = 3;
	int b = -5;
	int c = a & b;
	printf("%d\n", c);
	return 0;
}

4.1.3运行结果

c语言---操作符(详解),c语言,c语言

4.1.4 画图解释

c语言---操作符(详解),c语言,c语言

4.2 按位或(|)

4.2.1按位或的计算逻辑

两个同时为0,才为0

4.2.2 代码

#include<stdio.h>
int main()
{
	int a = 3;
	int b = -5;
	int c = a |b;
	printf("%d\n", c);
	return 0;
}

4.2.3运行结果

c语言---操作符(详解),c语言,c语言

4.2.4画图解释

c语言---操作符(详解),c语言,c语言

4.3按位异或(^)

4.3.1按位异或计算逻辑

相同为0,相异为1。

4.3.2代码

#include<stdio.h>
int main()
{
	int a = 3;
	int b = -5;
	int c = a ^b;
	printf("%d\n", c);
	return 0;
}

4.3.3 运算结果

c语言---操作符(详解),c语言,c语言

4.3.4画图解释

c语言---操作符(详解),c语言,c语言

4.4按位取反(~)

4.4.1按位取反计算逻辑

所有位按位取反

4.4.2代码

#include<stdio.h>
int main()
{
	int a = 0;
	int b= ~a;
	printf("%d\n", b);
	return 0;
}

4.4.3运行结果

c语言---操作符(详解),c语言,c语言

4.4.4画图分析

c语言---操作符(详解),c语言,c语言

五、单目操作符

!、++、–、&、*、+、-、~ 、(类型)

c语言---操作符(详解),c语言,c语言
如上图标黄色的,先参与运算,再加或减。
如上图标红色的,先加或减,再运算。
c语言---操作符(详解),c语言,c语言

六、逗号表达式

逗号表达式,就是⽤逗号隔开的多个表达式。

6.1形式

exp1, exp2, exp3, …expN

6.2特点

从左往右依次计算,取最右边的结果为表达式最后的结果。

6.3代码

#include<stdio.h>
int main()
{
	int a = 1;
	int b = 2;
	int c = (a > b, a = b + 10, a, b = a + 1);
		printf("%d", c);
	return 0;
}

6.4运行结果

c语言---操作符(详解),c语言,c语言

6.5画图解释

c语言---操作符(详解),c语言,c语言

七、 下标访问[]、函数调用()

7.1下标访问[]操作符

#include<stdio.h>
int main()
{
	int arr[] = { 1,2,3,4,5 };
		printf("%d", arr[2]);//这里的[]就是下标访问操作符
	return 0;
}

7.2函数调用操作符

c语言---操作符(详解),c语言,c语言

八、结构成员访问操作符

8.1结构体

c语⾔已经提供了内置类型,如:char、short、int、long、float、double等,但是只有这些内置类型还是不够的,假设我想描述学⽣,描述⼀本书,这时单⼀的内置类型是不⾏的。描述⼀个学⽣需要名字、年龄、学号、⾝⾼、体重等;描述⼀本书需要作者、出版社、定价等。C语⾔为了解决这个问题,增加了结构体这种⾃定义的数据类型,让程序员可以⾃⼰创造适合的类型。结构是⼀些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量,如:标量、数组、指针,甚⾄是其他结构体。

8.1.1结构的声明

创造一个新的类型

struct tag
{
 member-list;
}variable-list;

描述一个学生:

struct Stu
{
 char name[20];//名字
 int age;//年龄
 char sex[5];//性别
 char id[20];//学号
}s4,s5,s6; //分号不能丢
//s4,s5,s6是结构体变量(全局的)
struct Stu s7;//也是全局的
int main()
{
 struct Stu s1;
 struct Stu s2;
 struct Stu s3;
 //s1,s2,s3这三个结构体变量(局部的)
 return 0}

8.1.2结构体变量的定义和初始化

struct Stu
{
	char name[20];//名字
	int age;//年龄
	char sex[5];//性别
	char id[20];//学号
}s4, s5, s6; //分号不能丢
//s4,s5,s6是结构体变量(全局的)
struct Stu s7;//也是全局的
int main()
{
	struct Stu s1 = { "张三",20,"男","20231234" };//初始化
	struct Stu s2={.age=30,.name="Lina", .sex="男",.id="1008611"};//指定顺序初始化
	struct Stu s3;
	//s1,s2,s3这三个结构体变量(局部的)
	return 0;
}

再看一个初始化

#include<stdio.h>

struct S
{
	char c;
	int n;
};
struct B
{
	struct S s;
	int* p;
	char arr[10];
	float sc;
};
int main()
{
	struct B b = { {'A',60},NULL,"权权",66.6f };//初始化b
	return 0;
}

8.1.3 结构体成员的直接访问

使用方式:结构体变量.成员名

8.1.3.1代码1
#include<stdio.h>
struct Stu
{
	char name[20];//名字
	int age;//年龄
	char sex[5];//性别
	char id[20];//学号
}s4, s5, s6; //分号不能丢
//s4,s5,s6是结构体变量(全局的)
struct Stu s7;//也是全局的
int main()
{
	struct Stu s1 = { "张三",20,"男","20231234" };//初始化
	struct Stu s2={.age=30,.name="Lina", .sex="男",.id="1008611"};//指定顺序初始化
	struct Stu s3;
	//s1,s2,s3这三个结构体变量(局部的)
	printf("%s %d %s %s", s1.name, s1.age, s1.sex, s1.id);
	return 0;
}
8.1.3.1.1代码1运行结果

c语言---操作符(详解),c语言,c语言

8.1.3.2代码2
#include<stdio.h>
struct S
{
	char c;
	int n;
};
struct B
{
	struct S s;
	int* p;
	char arr[10];
	float sc;
};
int main()
{
	struct B b = { {'A',60},NULL,"权权",66.6f };
	printf("%c\n", b.s.c);
	return 0;
}
8.1.3.2.2代码2运行结果

c语言---操作符(详解),c语言,c语言

8.1.4接构体成员的间接访问

使用方法:结构体指针->成员名
有时候我们得到的不是⼀个结构体变量,⽽是得到了⼀个指向结构体的指针。如下所示:

8.1.4.1代码
#include<stdio.h>
struct Point
{
	int x;
	int y;
};
int main()
{
	struct Point p = { 3, 4 };
	struct Point* ptr = &p;
	ptr->x = 10;
	ptr->y = 20;
	printf("x = %d y = %d\n", ptr->x, ptr->y);
	return 0;
}
8.1.4.1.1代码运行结果:

c语言---操作符(详解),c语言,c语言

九、 操作符的属性:优先级、结合性

C语⾔的操作符有2个重要的属性:优先级、结合性,这两个属性决定了表达式求值的计算顺序。

9.1优先级

优先级指的是,如果⼀个表达式包含多个运算符,哪个运算符应该优先执⾏。各种运算符的优先级是不⼀样的。

 3 + 4 * 5;

上面示例中,表达式 3 + 4 * 5 里面既有加法运算符( + ),又有乘法运算符( * )。由于乘法的优先级高于加法,所以会先计算 4 * 5 ,而不是先计算 3 + 4 。

9.2结合性

如果两个运算符优先级相同,优先级没办法确定先计算哪个了,这时候就看结合性了,则根据运算符是左结合,还是右结合,决定执⾏顺序。⼤部分运算符是左结合(从左到右执行),少数运算符是右结合(从右到左执行),比如赋值运算符( = )。

 5* 6 / 2;

上面示例中, * 和 / 的优先级相同,它们都是左结合运算符,所以从左到右执行,先计算 5 * 6 ,再计算 6 / 2 。
运算符的优先级顺序很多,下面是部分运算符的优先级顺序(按照优先级从⾼到低排列),建议大概记住这些操作符的优先级就行,其他操作符在使用的时候查看下面表格就可以了。
• 圆括号( () )
• 自增运算符( ++ ),⾃减运算符( – )
• 单⽬运算符( + 和 - )
• 乘法( * ),除法( / )
• 加法( + ),减法( - )
• 关系运算符( < 、 > 等)
• 赋值运算符( = )
由于圆括号的优先级最⾼,可以使用他改变其他运算符的优先级。
下表列出 C 运算符的优先级和结合性。运算符从上到下以降序列出。
c语言---操作符(详解),c语言,c语言

9.3注意

即使有了操作符的优先级和结合性,我们写出的表达式依然有可能不能通过操作符的属性确定唯⼀的计算路径,那这个表达式就是存在潜在⻛险的,建议不要写出特别负责的表达式。

十、 总结

掌握好操作符,可以更好的在编程中得心应手,虽然有一点多,加油,奥利给,干就完了。
c语言---操作符(详解),c语言,c语言

欧耶!!!!!我学会啦!!!!!文章来源地址https://www.toymoban.com/news/detail-835735.html

到了这里,关于c语言---操作符(详解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C语言】操作符----详解

    💓博客主页:江池俊的博客 ⏩收录专栏:C语言初阶之路 👉其他专栏:数据结构探索 💻代码仓库:江池俊的代码仓库 🍁 如果觉得博主的文章还不错的话,请点赞👍收藏🌟 三连支持一下博主💞 目录 操作符分类:  💨 算术操作符  💨 移位操作符  原码、反码、补码

    2024年02月14日
    浏览(24)
  • 【c语言操作符系列1】^(异或操作符)讲解和多种例题详解

    目录 一、^ 是什么(^称为异或) 二、^的规律(特点) 三、可利用^秒杀的常见例题(重点) 1、消失的数字  2、不一样的人生密码 3、交换两个数(不能创建中间变量) 4、找出只出现一个的两个数字 是一种操作符, 针对二进制异或而言的 ,两个数对应的二进制位相同,异或

    2024年02月16日
    浏览(53)
  • c语言:操作符详解(上)

    算术操作符: + 、- 、* 、/ 、% 移位操作符: 位操作符: | ^ 赋值操作符: = 、+= 、 -= 、 *= 、 /= 、%= 、= 、= 、= 、|= 、^= 单目操作符: !、++、–、、*、+、-、~ 、sizeof、(类型) 关系操作符: 、= 、 、= 、 == 、 != 逻辑操作符: 、|| 条件操作符:? : 逗号表达式: , 下标引用:

    2024年03月16日
    浏览(28)
  • 【 c 语言 】赋值操作符详解

    🎈个人主页:豌豆射手^ 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:C语言 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步! 引言: 在C语言编程中,赋值操作符是我们日常编程中不可或缺的一部分。它不仅是初始化变量、修改

    2024年04月09日
    浏览(26)
  • C语言操作符详解(下)

    在C语言操作符详解(上)中,已经详细系统的介绍了各种操作符及其使用场景。 接下来,本文将逐步介绍编译器执行这些代码背后所做的事情、操作符优先级、结合性以及求值顺序! 表达式求值的顺序一部分是由 操作符的优先级和结合性决定。 同样,有些表达式的操作数在

    2024年02月05日
    浏览(28)
  • 爱上C语言:操作符详解(上)

    🚀 作者:阿辉不一般 🚀 你说呢: 生活本来沉闷,但跑起来就有风 🚀 专栏:爱上C语言 🚀 作图工具:draw.io ( 免费开源的作图网站) 如果觉得文章对你有帮助的话,还请点赞,关注,收藏支持博主,如有不足还请指点,博主及时改正,感谢大家支持!!! 大家好啊😉!今

    2024年02月04日
    浏览(32)
  • 初阶C语言-操作符详解(上)

    “不飞则已,一飞冲天;不鸣则已,一鸣惊人。” 今天,我们一起来学习一下操作符的相关知识。 算术操作符 + - * / % 移位操作符 位操作符 | ^ 赋值操作符 = += -= *= /=... 单目操作符 ! sizeof ++ -- ... 关系操作符 = = == != 逻辑操作符 || 条件操作符 ? : 逗号表达式 , 下标引用、函数

    2024年02月13日
    浏览(26)
  • C语言最全操作符详解✌️

    C语言的一系列操作符中,其中一组叫双目操作符,也叫算数操作符。分别是:+,–,*,/,%。 ①+和– +和–的用途与数学中基本一致,用来做加法和减法。例如: 我们可以发现,他们之所以叫双目操作符,是因为他们的左边和右边一共有两个操作数。 ②* *运算符也与数学

    2024年02月21日
    浏览(28)
  • 初阶C语言——详解操作符(1)

    Hello,我们又见面了,最近不知道大家是否在持续输出代码呢?代码能力是否提高了呢?今天让我们来一起学习操作符,操作符在我们学习语言中很重要,我们要知道每个操作符的作用和用法,下面开始我们的学习。 操作符分类: 算术操作符 移位操作符 位操作符 赋值操作符

    2024年02月12日
    浏览(26)
  • 初阶C语言-操作符详解(下)

    🌞 “等春风得意,等时间嘉许!” 接下来,我们把操作符没学完的继续学完! 📖我们来看一下下面这段代码: 关系操作符: = = !=(用于测试不相等) ==(用于测试相等) 注:不要把 == 和 = 混起来❗ ✅ == 用于测试相等, = 用于赋值。 📖逻辑操作符: (逻辑与操作符)

    2024年02月13日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包