🌻开场语
亲爱的读者,大家好!我是一名正在学习编程的高校生。在这个博客里,我将和大家一起探讨编程技巧、分享实用工具,并交流学习心得。希望通过我的博客,你能学到有用的知识,提高自己的技能,成为一名优秀的程序员。如果你有任何疑问或建议,请随时在评论区留言,让我们一起成长进步!现在,让我们开始这场知识之旅吧!
个人主页:FEN03
文章专栏:C语言
文章目录
- 🌻开场语
- 🌻前言
- 🌻位操作符
- 1. 🌹&(按位与)
- 2. 🌹| (按位或)
- 3. 🌹^(按位异或)
- 4. 🌹~(按位取反)
- 🌻总结
- 🌻结束语
🌻前言
本文章,将会逐一介绍什么是位操作符,如何去用位操作符。文章内容仅是个人学习见解,如有错误,还请各位大佬指出!
🌻位操作符
位操作符有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呢?
解析:
-
因为是对二进制位操作的,所以我们需要写出数值的二进制位,-3的二进制位是:
-
6的二进制位:
-
进行按位与:
最终的结果得到: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呢?
解析:
- 首先,我们需要写出数值的二进制形式,-6的二进制:
- 然后写出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
解析:
- 写出-4的二进制位:
- 写出6的二进制:
- 进行按位异或:
最终得到的值是:-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 的呢?
解析:
- 写出8的二进制:
- 进行按位取反:
最终的结果就是:-9
🌻总结
- &(按位与),|(按位或),^(按位异或),这三个都是双目运算符,操作数是2个。
- ~(按位取反)是单目运算符,操作数是1个。
- 这些操作符都需要了解规则,其中按位异或复杂一点,需要多了解。
🌻结束语
非常感谢您花时间阅读我的博客,希望我的分享能为您带来收获。如果您对本文有任何想法或疑问,欢迎在评论区留言交流。如果您喜欢我的博客,请继续关注,我会定期更新更多精彩内容。最后,别忘了行动起来的力量,让我们一起实践这些方法,见证自己的成长和进步!
再见,祝您生活愉快!
如有错误,或者疑惑,还请评论区留言,或者私信即可,感谢支持!