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

本文详细介绍了编程中的各种操作符分类,包括算术、移位、位、赋值、单目、关系、逻辑、条件等,并探讨了二进制和进制转换的方法,以及结构成员的访问和操作符的优先级与结合性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1.操作符的分类

2.二进制和进制的转换

补充:原码,反码和补码:

3.移位操作符(针对于二进制数字)

4.位操作符

5.单目操作符

6.逗号表达式

7.下表访问【】,函数调用()

8.结构成员访问操作符

9.操作符的属性:优先性和结合性(可以查官网)

如有错误,还望指正!

关注博主,后期优质内容不断更新!!! 


1.操作符的分类

算术操作符:+,-,*,/,%

移位操作符:>>,<<

位操作符:&,|,^

赋值操作符:=,+=,-=,/=,*=,%=,>>=,<<=,&=,|=,^=

单目操作符:!,++,--,&(取地址),*,+,-,~,sizeof(类型)

关系操作符:>,<,=,>=,<=,!=

逻辑操作符:&&,||

条件操作符:?  :

逗号表达式:,

下标引用:[ ]

函数调用:( )

结构成员访问: . , 、, ->

2.二进制和进制的转换

二进制:


  • 二进制的每一位都是由0和1两个数字组成
  • 二进制中满2进1

    eg:1011就是一个二进制数字  

 进制的转化:

补充:​​​​​无论采用哪一种进制计数,数值的表示都包含两个基本要素:基数和各位的‘权’(权:是指数制中每一固定位置对应的单位值,即就是常数,其值等于以基数为底,以数字符号所处的位置的序号为指数的整数次幂)  

其他进制转化为二进制采用位权展开,然后个项相加,就可得到对应的十进制数字

十进制转化为二进制整数部分采用倒数取余,小数部分采用正数取整

二进制与八进制之间的相互转化采用421法

二进制与十六进制之间的相互转化采用8421法

补充:原码,反码和补码:

整数的二进制表示方法有三种:原码(某数字的二进制表示方法),反码和补码

有符号的整数的三种表示方法均有符号位和数值位两部分,二进制序列中,最高位的1位是被当做符号位,用0表示正,用表示负。

ps:正数的原反补码都相等。

负数的原反补码都不相等。

反码=在原码的基础上符号位不变其他位取反;补码=反码+1

总结:原码和补码之间的转换都可以采用取反+1

3.移位操作符(针对于二进制数字)

<<   左移操作符(右边用0填充,左边丢弃)  ,左移n位,操作后的效果给原数字扩大2的n次方倍

>>  右移操作符   右移m位操作后的效果是给原数字缩小2的m次方

右移操作符:分为逻辑右移(左边用0填充,右边丢弃)和算数右移(左边用原该值的符号位填充,右边丢弃)

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

4.位操作符

& 按位与:对应二进制位有就为0,两个同时为1才为1

|  按位或:对应的二进制位有1就为1,两个同时为0才为0

^ 按位异或:对应的二进制位相同为0,相异为1

~ 按位取反

 题目:a=5,b=3不创建中间变量

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

5.单目操作符

!,++,--,&(取地址),*,+,-,~,sizeof(类型)

6.逗号表达式

exp1,exp2,exp3……expn

逗号表达式:就是用逗号隔开的多个表达式。

逗号表达式,从左向右依次执行。整个表达式的结果就是最后一个表达式的结果

7.下表访问【】,函数调用()

[ ]:下标引用操作符     

操作数:一个数组名+一个索引值(下标)

int arr[10];
arr[9]=10;
[ ]的操作数是arr和9

():函数调用操作符,接受一个或者多个操作数是函数名,剩余的操作数就是传递给函数的参数

注:前面的章节中我有讲到!!!

8.结构成员访问操作符

结构体:是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量,如:标量,数组,指针,甚至是其他结构体。

结构的声明:

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

 结构体变量的定义,初始化,结构成员的访问操作(直接访问和间接访问)

直接访问:结构体变量.成员名

间接访问:结构体指针 ->成员名

#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", ptr->x, ptr->y);
	return 0;
}

9.操作符的属性:优先性和结合性(可以查官网)

优先性:和数学中运算优先性类似,但也是有不同指处的(相邻操作符的优先级高低,高的先算)

结合性:在有限性相同的情况下,从左向右或者从右向左求值

pS:尽量不要输入冗余复杂的表达式,确定唯一的计算路径。

这两个属性决定了表达式求值得计算顺序!!!

如有错误,还望指正!

关注博主,后期优质内容不断更新!!! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

workGoal

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值