2的幂问题 cur = (2>>1) & 1 ; cur = ?

前言:

如往常一样,打开每日一练刷刷题,看到其难度为简单,于是满怀信心点开此题,题目倒是看的懂,只是看到选项中(cur += (n >> i) & 1;  return n > 0 && cur == 1;)时,懵了看不懂哈哈,于是我查找资料,并复习了一下位移运算符与逻辑运算符,才看的懂选项,然后就做出来了。

题目:

正确答案:

#include <bits/stdc++.h>

using namespace std;

class Solution

{

public:

    bool isPowerOfTwo(int n)

    {

        int cur = 0;

        for (int i = 0; i < 31; i++)

        {

            cur += (n >> i) & 1;

        }

        return n > 0 && cur == 1;

    }

};

讲解:

想必难点大家都看出来了,分别拿出来看">>"和"&"还是看的懂的,但是一旦和数字、字母连起来了就是真的傻眼了,很少见这种类型,继续往下看,我带你解决这个两个问题。

1.">>"右移运算符 

在与数字进行连接时 会自动将数字转为二进制进行操作

例:120 >> 2 其中:">>"左边的数120 称为左操作数 ">>"右边的数2 称为右操作数    

">>"的含义:将左操作数向右移动其右操作数所要求的位数,移出的位补0;

公式:向右移一次,结果为该数除以2,即:将一个数向右移n位,相当于将该数除以2的n次方。

左移运算符刚好相反,想必大家这么聪明肯定都会了,我就不列举了。

       如果你真的还想知道更多细节:可以看看这为博主所写:

【C语言初阶】操作符之 移位运算符(>>、<<)详解

2."&"位与运算符

在数字和数字进行连接时 会自动将数字转为二进制进行判断

例:2&1结果为0     10&15结果为 1(10 > 0转为bool类型 为真 结果为1)

解决:

两个问题既然都已经解决了,那么可以看懂选项了。例如将n = 2代入,i = 0. 2>>0 仍为 2  2&1 结果为假 返回0,cur += 0; i++, 2>>1 结果为1 二进制为 00000001  1&1 结果  二进制为00000001 为 真 返回1 cur += 1,cur = 1 ,之后 2>>2,3,4...30 二进制均为 00000000 & 1 的结果均为 0.最终cur =1,符合 2>0&&cur == 1.

总结:一些基础知识确实应该牢牢掌握才行,并不是我们不会,而是我们没有一个牢固的基础,不要小看简单的难度,其知识点我们未必掌握。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小苏先生.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值