21.《C语言》——【位操作符】


🌻开场语

亲爱的读者,大家好!我是一名正在学习编程的高校生。在这个博客里,我将和大家一起探讨编程技巧、分享实用工具,并交流学习心得。希望通过我的博客,你能学到有用的知识,提高自己的技能,成为一名优秀的程序员。如果你有任何疑问或建议,请随时在评论区留言,让我们一起成长进步!现在,让我们开始这场知识之旅吧!


在这里插入图片描述
个人主页:FEN03
文章专栏:C语言



🌻前言

本文章,将会逐一介绍什么是位操作符,如何去用位操作符。文章内容仅是个人学习见解,如有错误,还请各位大佬指出!


🌻位操作符

位操作符有4种:

  1. &(按位与)
  2. | (按位或)
  3. ^(按位异或)
  4. ~(按位取反)

位操作符都是对二进制位进行操作的
注意:位操作符只能用于整数


1. 🌹&(按位与)

按位与是一个双目运算符,按位与是对二进制位进行操作,那么它的操作规则是:对位的二进制位,有0为0,相同为1则为1

例子1:

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

运行结果:

在这里插入图片描述

为什么会得到4呢?
解析:

  1. 因为是对二进制位操作的,所以我们需要写出数值的二进制位,-3的二进制位是:
    在这里插入图片描述

  2. 6的二进制位:在这里插入图片描述

  3. 进行按位与: 在这里插入图片描述

最终的结果得到:4


2. 🌹| (按位或)

按位或是一个双目运算符,是对二进制位操作,规则是:对位的二进制位,有1为1,相同0为0

例子1:

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

运算结果:

在这里插入图片描述

是怎么得到5呢?
解析:

  1. 首先,我们需要写出数值的二进制形式,-6的二进制:
    在这里插入图片描述
  2. 然后写出3的二进制:
    在这里插入图片描述
  3. 进行按位或:
    在这里插入图片描述
    这样最终的结果就能够得到:-5

3. 🌹^(按位异或)

按位异或也是双目运算符,也是对二进制位操作,规则是:相同为0,相异为1

例子1:

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

运行结果:

在这里插入图片描述

为什么能够得到:-6
解析:

  1. 写出-4的二进制位:
    在这里插入图片描述
  2. 写出6的二进制:
    在这里插入图片描述
  3. 进行按位异或:
    在这里插入图片描述

最终得到的值是:-6


对于按位异或,有一个知识补充:

例子1:

#include<stdio.h>
int main()
{
	int a1 = 1;  
	int a2 = 2; 
	int a3 = 3; 
	int a4 = 4;

	int b = 0;

	int c1 = a1 ^ b;  
	int c2 = a2 ^ b;  
	int c3 = a3 ^ b;  
	int c4 = a4 ^ b; 

	printf("%d\n", c1);  
	printf("%d\n", c2);  
	printf("%d\n", c3);  
	printf("%d\n", c4);  
	return 0; 
}

运行结果:

在这里插入图片描述

看结果,我们可以得出,n ^ 0 = n ,也就是一个数如果按位异或0,得到的结果是本身。


例子2:

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

	int a1 = 6;
	int b1 = a1 ^ a1; 
	printf("%d\n", b1); 

	int a2 = 4;
	int b2 = a2 ^ a2;
	printf("%d\n", b2); 

	return 0; 
}

运行结果:

在这里插入图片描述

我们可以得出结论:n ^ n = 0,也就是一个数如果按位异或本身,得到的结果是0


4. 🌹~(按位取反)

按位取反是单目运算符,同样的是对二进制位进行操作,规则是:0为1,1为0

例子1:

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

运算结果:

在这里插入图片描述

是怎么得到:-9 的呢?
解析:

  1. 写出8的二进制:
    在这里插入图片描述
  2. 进行按位取反:
    在这里插入图片描述

最终的结果就是:-9


🌻总结

  1. &(按位与),|(按位或),^(按位异或),这三个都是双目运算符,操作数是2个。
  2. ~(按位取反)是单目运算符,操作数是1个。
  3. 这些操作符都需要了解规则,其中按位异或复杂一点,需要多了解。

🌻结束语

非常感谢您花时间阅读我的博客,希望我的分享能为您带来收获。如果您对本文有任何想法或疑问,欢迎在评论区留言交流。如果您喜欢我的博客,请继续关注,我会定期更新更多精彩内容。最后,别忘了行动起来的力量,让我们一起实践这些方法,见证自己的成长和进步!

再见,祝您生活愉快!

如有错误,或者疑惑,还请评论区留言,或者私信即可,感谢支持!


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值