吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1636|回复: 29
收起左侧

[求助] C语言里怎么知道一个数是2的几次方

  [复制链接]
smilencetion 发表于 2022-10-24 09:41
现有一个数,确定是2的整数次方,比如32是2的5次方
那么如何在不用循环,不用math.h里的函数,得到这个5呢?可以通过哪些位运算得到吗?

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
小公主々 + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

塞北的雪 发表于 2022-10-24 09:55
[JavaScript] 纯文本查看 复制代码
幂	结果(10)	结果(2)
1	2	10
2	4	100
3	8	1000
4	16	10000
5	32	100000
6	64	1000000
7	128	10000000
8	256	100000000


找找规律

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
Arcticlyc + 1 + 1 我很赞同!

查看全部评分

yk2014 发表于 2022-10-24 10:01
yk2014 发表于 2022-10-24 10:02
yk2014 发表于 2022-10-24 10:01
可以&1,不等于1就右移,但是还是离不开循环

其实右移就是除以2
鲸鱼jerry 发表于 2022-10-24 10:12
塞北的雪 发表于 2022-10-24 09:55
[mw_shl_code=javascript,true]幂        结果(10)        结果(2)
1        2        10
2        4        100

懂了,用if else 把2的幂结果穷举出来
pinesnow 发表于 2022-10-24 10:14
那就递归嘛!
WolfAvenue 发表于 2022-10-24 10:20
位判断吧,判断1的位置,从高位算起,不用循环好像不行啊
~零度 发表于 2022-10-24 10:21
本帖最后由 ~零度 于 2022-10-24 10:29 编辑

不用循环不太可能,用循环的话可以参考:

[C] 纯文本查看 复制代码
int number = 32, x = 0;
while(number>>1)++x;
printf("%d是2的%d次方\n", number, x);


楼上说用递归,我感觉和循环是类似的,可以参考一下:
[C] 纯文本查看 复制代码
int log2(int number, int x)
{
number = number >> 1;
if(number)x=log2(number, x+1);
return x;
}

int main()
{
int number = 32;
printf("%d是2的%d次方\n", number, log2(number, 0));
}

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
evea + 1 + 1 我很赞同!

查看全部评分

甜萝 发表于 2022-10-24 10:39
本帖最后由 paypojie 于 2022-10-24 10:41 编辑

不会c 用python测试一下

[Python] 纯文本查看 复制代码
n = 4

for x in range(n):
    if 2 ** x == n:
        print(x)
        break

n = 128

for x in range(n):
    if 2 ** x == n:
        print(x)
        break

image.png

还是会用到for循环

豆虫 发表于 2022-10-24 10:51
[C] 纯文本查看 复制代码
#include<stdio.h>
int pow(int n)
{
	if (n == 2)
		return 1;
	return 1 + pow(n / 2);
}
int main()
{
	int a;
	int n = 8;
	a = pow(n);
	printf("%d是2的%d次方。\n", n,a);
	return 0;
}

供参考。。。。。。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 07:20

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表