在学习c语言时,我们一定会遇到关于位操作符的相关知识,很多新手小白不太理解位操作符的运算法则和运用逻辑,今天这篇博客将会将所有知识点进行归纳总结,其中还包括几道练习题帮助大家更好地理解位操作符的运用~~
下面,请各位老司机坐稳扶好,我们要开车啦~~~~
一、位操作符包含什么?
& //按位与
| //按位或
^ //按位异或
注意:这里的所有操作数必须是整数!!
位操作符的运算规则
按位与的运算规则:对应的二进制位有0则为0,两个同时为1才为1;
按位或的运算规则:对应的二进制位有1则为1,两个同时为0才为0;
按位异或的运算规则:对应的二进制位相同为0,相异为1。
大家可以还没办法完全理解这里的运算规则,下面我们来用具体的代码展示一下~~
分析代码:所有的位运算都是利用整数的补码进行运算的,而正数的原反补相同,所以可以得到上面的结果~~
二、异或操作符有什么作用?
要想了解异或操作符的作用,我们先要了解一下异或运算的特点~~
请大家思考下面的几个式子~~
//a^a->0
//a^0->a
//a^b^a->b
//a^a^b->b
这是怎么得到的呢?
异或的运算规则:对应的二进制位相同为0,相异为1。
//a^a->0
//a^0->a
这两个思考起来难度不大,我们把目光聚焦在后两个~~
下面,我们给a和b分别赋值为1和2,接着用代码实现一下a^b^a:
分析代码:这里我们发现a^b^a竟然等于b!! 也就是说,相当于a^a->0,然后0^b->b!!这里,我们不妨提出大胆的猜测:异或满足交换律!!!
我们再来看一看a^a^b->b
分析代码:这里我们发现a^b^a和a^a^b结果居然是相同的,也就是说,把后两者进行交换后,异或的结果保持不变。
这里给出异或的重要特征:异或运算时支持交换律的!!
好的,得出这个重要的运算特征之后,我们在来看一道变态的面试题来感受一下异或运算的运用~~
不能创建临时变量(第三个变量),实现两个整数的交换。
我们在此之前学过的方法,需要创建一个中间变量,才能实现两个数字之间的交换,但是这道面试题是不让我们创建第三个变量的,那么我们应该怎么办呢?
这里就用到了异或运算~~~~~
分析代码:这里我们发现,运用上图展示的代码也可以实现a与b之间的交换,那么这个代码是什么意思呢?我们逐句翻译一下~~~~~
由于a = a ^ b;那么b = a ^ b;就等于b=a^b^b=a^0=a;这里就将a的值放进了b中;而最后a = a ^ b;此时的a=a^b,而b=a,则可以理解为a=a^b^a;这里就将b的值放进了a中。这样整体就实现了a与b的交换!
三、常见的题目练习
下面,我们看一看位操作符在题目中如何使用~~~
给大家分享两个牛客网的题目o_o
第一题
两个整数二进制位不同个数__牛客网 (nowcoder.com)
下面我们贴上代码,这里运用异或运算可以解决问题~~~
第二题
下面我们贴上代码
位操作符知识点总结到这里就结束啦,接下来我们还会继续更新更多的有趣的代码知识,敬请期待哟~~
欢迎大佬们批评指正,创作者不易,别忘了三连一波吖~~小粉象这厢有礼啦~~