【c语言从入门到精通】c语言原来一点都不难!位操作符你学会了嘛?(小白快进)

在学习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)

 下面我们贴上代码,这里运用异或运算可以解决问题~~~

 第二题

二进制中1的个数__牛客网 (nowcoder.com)

  下面我们贴上代码

位操作符知识点总结到这里就结束啦,接下来我们还会继续更新更多的有趣的代码知识,敬请期待哟~~

欢迎大佬们批评指正,创作者不易,别忘了三连一波吖~~小粉象这厢有礼啦~~

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值