【一篇文章带你重温重点】C语言操作符

在这里插入图片描述


🚲算术操作符

加( + ) 减( - )乘( * )除( / ) 取模( % )

算术操作符是我们日常用的最多的,也是大家最熟悉不过的。

🌟要注意以下几点

1. 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。

2. 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。

3. % 操作符的两个操作数必须为整数。返回的是整除之后的余数。

典型错误
在这里插入图片描述


🚲移位操作符

移位操作符分左移和右移

<< 左移操作符
>> 右移操作符

_
🌟注:移位操作符的操作数只能是整数。而且是针对二进制补码进行移动

1.左移操作符

它的移位规则:

左边抛弃、右边补0

在这里插入图片描述


2.右移操作符

移位规则:

首先右移运算分两种:

1. 逻辑移位
左边用0填充,右边丢弃

2. 算术移位
左边用原该值的符号位填充,右边丢弃

那计算机采用的是逻辑移位,还是算术移位呢???
正确答案是取决于编译器,不过大部分编译器的是采用算术移位,因为这样意义才大!!

先补充一些计算机存储数据的知识

在计算机中存储数据是按二进制的补码进行存储的
补码的转换公式=原码取反加一!
正数的原码反码补码是一样的!!!!!!

假设编译器是逻辑移位
在这里插入图片描述


正数右移

在这里插入图片描述


负数右移

在这里插入图片描述

所以说,只有当右移位算术移位才有实际意义,比如我们上面把-4右移,其实就是让它除2,变成-2,而逻辑右移则将这个数变成一个非常大的正数,那它的意义何在呢?

🚲位操作符

位操作符有:

& -------- 按位与
| --------- 按位或
^ -------- 按位异或
🌟注:他们的操作数必须是整数。

通过一些练习题来理解它是最好不过的方法!

#include <stdio.h>
int main()
{
	int num1 = 1;
	int num2 = 2;
	int a=num1& num2;
	int b=num1 | num2;
	int c=num1^ num2;

	printf("a=%d  b=%d  c=%d", a, c, b);

	return 0;
}

上面结果:a=0,b=3,c=3
解释如下
在这里插入图片描述

有个小结论:任何数与0异或等于任何数,比如10^0=10
任何数与自己异或等于0,比如10^10=0
而且它们满足交换律,比如10^ 4 ^ 10= 10^ 10 ^4=0 ^ 4=4

至于为什么是这样,其实跟上面图的num1^num2一样的分析方法,自己可以尝试画一下图理解,有了这个结论就可以做一下下面这道面试题

曾经有一道变态面试

不能创建临时变量(第三个变量),实现两个数的交换。
在这里插入图片描述

#include <stdio.h>
int main()
{
	int a = 10;
	int b = 20;
	printf("交换前a = %d b = %d\n", a, b);//
	a = a ^ b;	// 其实就是a=10^20,先不用算结果
	b = a ^ b;	//然后现在b=a^b=10^20^20,所以就变成b=10^0=10

	a = a ^ b;	//这里就是a= 10 ^ 20 ^ b = 10 ^ 20 ^ 10
				//用交换律就等于10 ^ 10 ^ 20 = 0 ^ 20 = 20
	printf("交换后a = %d b = %d\n", a, b);//这样两个数就交换过来了
	

	return 0;
}

🚲赋值操作符

赋值操作符是一个很棒的操作符,他可以让你得到一个你之前不满意的值。也就是你可以给自己重新赋值。

我们创建变量并赋值叫初始化,而后面才叫赋值
在这里插入图片描述


复合赋值符

+=
–=
*=
/=
%=
>>=
<<=
&=
|=
^=

上面的都像下图一样等价比如a*=2 等价于a=a*2
在这里插入图片描述


🚲单目操作符

! ------------ 逻辑反操作
- ------------ 负值
+ ----------- 正值
& ------------取地址
sizeof ------操作数的类型长度(以字节为单位)
~ ------------ 对一个数的二进制按位取反
------------前置、后置–
++ ----------前置、后置++
* ------------ 间接访问操作符(解引用操作符)
(类型) ------ 强制类型转换

主要要注意的是前置和后置的区别

在这里插入图片描述


🚲关系操作符

>
>=
<
<=
!= ----------- 用于测试“不相等”
== ---------- 用于测试“相等”

关系操作符比较简单,最主要的就是下面这个
警告:
在编程的过程中== 和=不小心写错,导致的错误

在这里插入图片描述


🚲逻辑操作符

&& ------------ 逻辑与
|| --------------- 逻辑或

注意:
区分逻辑与和按位与
区分逻辑或和按位或

1&2----->0--------按位与


1&&2---->1-------逻辑与 两边的数为真,表达式就为真


1|2----->3---------按位或


1||2---->1----------逻辑或 其中一方为真,则表达式为真

逻辑操作符常常用于条件判断语句,比如想判断一个是是否大于100,并且小于200
在这里插入图片描述

逻辑操作符还有一个最重要的点就是‘“短路”
用一道题理解

一道360笔试题

#include <stdio.h>
int main()
{
    int i = 0,a=0,b=2,c =3,d=4;
    i = a++ && ++b && d++;
    //i = a++||++b||d++;
    printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
    return 0;
}
//程序输出的结果是什么?

a=1,b=2,c=3,d=4
根据短路原则,只有a++运算了,其余没有进行运算
在这里插入图片描述

  • 61
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 71
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 71
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小明的c++笔记本

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

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

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

打赏作者

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

抵扣说明:

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

余额充值