C语言-操作符详解

目录

操作符的分类

1. 算术操作符

1.1 运算符 + 和 -

1.2  运算符 * 

1.3 运算符 /

​1.4 运算符 %

2. 移位操作符

2.1 左移操作符

2.2 右移操作符

3. 位操作符

3.1 按位与 &

3.2 按位或 |

3.3 按位异或 ^

3.4 按位取反 ~

4. 赋值操作符

4.1 简单的赋值

4.2 连续赋值

4.3 复合赋值符

5. 单目操作符

5.1 逻辑取反运算符 !

5.2 ++ 、--

5.3 + 和 -

5.4 取地址操作符 &

5.5 解引用操作符 *

5.6 按位取反 ~

5.7  sizeof

5.7.1 sizeof 的简单介绍

5.7.2 sizeof 的返回值

5.7.3 sizeof 的语法

5.8 强制类型转换 (类型)

6. 关系操作符

6.1 “关系表达式”与“关系运算符”

6.2 关系运算符

6.3 两个小注意

6.3.1 小注意 1

6.3.2 小注意 2

7. 逻辑操作符

7.1 逻辑与 &&

7.2 逻辑或 ||

7.3 逻辑取反 !

7.4 短路

8.  条件操作符

9. 逗号表达式

10. 下标引用

11. 函数调用

12. 结构成员访问

13. 操作符的优先性和结合性


操作符的分类

相邻的操作符之间用 “、”号隔开,并没有“、”这个操作符

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

1. 算术操作符

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

 + 、- 、*  、/ 、% 都是双目操作符。操作符又称为运算符。

1.1 运算符 + 和 -

运算符 + 和 - 用来完成加法和减法。

运算符 + 和 - 都是有两个操作数的,位于操作符两端的就是它们的操作数。

#include<stdio.h>
int main()
{
	int a = 5 + 25;		//  5 和 25 都是操作数,+ 是操作符
	int b = 60 - 15;	// 60 和 15 都是操作数,- 是操作符

	printf("%d\n",a);
	printf("%d\n",b);
	return 0;
}

1.2  运算符 * 

运算符 * 用来完成乘法

#include<stdio.h>
int main()
{
	int a = 5 * 25;		//  5 和 25 都是操作数,* 是操作符

	printf("%d\n", a);
	return 0;
}

1.3 运算符 /

运算符 / 用来完成除法。

除号的两端如果是整数,执行的就是整数除法,得到的结果也是整数。

#include<stdio.h>
int main()
{
	int a = 25 / 5;		//  25 和 5 都是操作数,/ 是操作符

	printf("%d\n", a);
	return 0;
}

有必要提到的是:

#include<stdio.h>
int main()
{
	int a = 25 / 10;
	float b = 25 / 10;

	printf("%d\n", a);
	printf("%f\n", b);
	return 0;
}

如果想得到 2.5 的浮点数,那么 运算符 / 的两个运算数里必须至少有一个是浮点数,这时C语言就会进行浮点数除法

#include<stdio.h>
int main()
{
	float a = 25 / 10.0;
	float b = 25.0 / 10;
	float c = 25.0 / 10.0;

	printf("%f\n", a);
	printf("%f\n", b);
	printf("%f\n", c);
	return 0;
}

1.4 运算符 %

运算符 % 表示求模运算,即返回两个整数相除的余值。

运算符只 % 能用于整数,不能用于浮点数。

负数求模的规则是,结果的正负号由第一个运算符的正负号决定。

#include<stdio.h>
int main()
{
	int a = 25 % 10;
	int b = -25 % 10;
	int c = 25 % -10;
	int d = -25 % -7;

	printf("%d\n", a);
	printf("%d\n", b);
	printf("%d\n", c);
	printf("%d\n", d);
	return 0;
}

2. 移位操作符

移位操作符:<<  、 >>

左移操作符 <<

右移操作符 >>

移位操作符的操作数只能是整数。

再看移位操作符之前呢,如果不是怎么了解(进制转换 和 原、反、补码),可以先看看我的另一篇博客:https://blog.csdn.net/m0_66687213/article/details/143448336?spm=1001.2014.3001.5502

2.1 左移操作符

移位规则:左边抛弃,右边补零

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

2.2 右移操作符

移位规则:

  • 逻辑右移:左边用 0 填充,右边丢弃
  • 算术右移:左边用原该值的符号位填充,右边丢弃
#include<stdio.h>
int main()
{
	int num = -1;
	int n = num >> 1;
	printf("%d\n", n);
	printf("%d\n", num);
	return 0;
}

逻辑右移1位演示:

算术右移1位演示:

注意:对于移位操作符,不要移动负数位,这个是标准未定义的。

3. 位操作符

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

3.1 按位与 &

#include<stdio.h>

int main()
{
	int a = 10;
	int b = 3;
	int c = a & b;

	//a的补码为:00000000 00000000 00000000 00001010
	//b的补码为:00000000 00000000 00000000 00000011
	//a & b 就是把 a 的补码和 b 的补码按位进行与运算
	//1 & 1==1
	//0 & 1==0
	//1 & 0==0
	//0 & 0==0
	//a的补码为:		00000000 00000000 00000000 00001010
	//b的补码为:		00000000 00000000 00000000 00000011
	// a & b 的补码为:	00000000 00000000 00000000 00000010
	//
	printf("%d", c);	//输出结果为 2
	return 0;
}

3.2 按位或 |

#include<stdio.h>

int main()
{
	int a = 10;
	int b = 3;
	int c = a | b;

	//a的补码为:00000000 00000000 00000000 00001010
	//b的补码为:00000000 00000000 00000000 00000011
	//a | b 就是把 a 的补码和 b 的补码按位进行或运算
	//1 | 1==1
	//0 | 1==1
	//1 | 0==1
	//0 | 0==0
	//a的补码为:		00000000 00000000 00000000 00001010
	//b的补码为:		00000000 00000000 00000000 00000011
	// a | b 的补码为:	00000000 00000000 00000000 00001011
	//
	printf("%d", c);	//输出结
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值