永发信息网

用一行代码判断一个数是否是2的次方

答案:2  悬赏:20  手机版
解决时间 2021-03-19 19:30
  • 提问者网友:我没有何以琛的痴心不悔
  • 2021-03-19 12:43
1、if(n && ((n & (~n + 1)) == n))

2、if(n && !(n & (n - 1)))
谁能解释一下 我看不懂!~n是什么意思?
最佳答案
  • 五星知识达人网友:摆渡翁
  • 2021-03-19 13:48
很简单,2个语句意思都一样,就来看第2个
if(n && !(n & (n - 1)))
判断分2部分,前面一个条件n很简单,就是说n!=0,下面!(n & (n - 1))
先分开来里面的n&(n-1),如果n是2的次方,2进制必然是1000这样1后面N个0,那n-1就必然是0111这样0后面连续几个1,这样2个按位与必然全是0000,然后!取反变成1,就是true,条件就符合了
全部回答
  • 1楼网友:夜余生
  • 2021-03-19 14:02

#include <stdio.h>

int isthreen(int num, int* t);  // num为输入的数,t用来返回次方

void main()

{

    int n, t;

    printf("请输入一个整数:");

    scanf("%d", &n);

    if(isthreen(n, &t)) printf("%d是3的%d次方\n", n, t);

    else printf("%d不是3的次方\n", n);

}

int isthreen(int num, int* t)

{

    *t = 0;

    do {

    num /= 3;

    (*t)++;

    } while(num > 3);

    if(num % 3 == 0 || num == 1) return 1;

    return 0;

}

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯