加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

最接近2的力量

发布时间:2020-12-16 09:48:17 所属栏目:百科 来源:网络整理
导读:给定无符号整数a(小于或等于1024),我需要找到满足以下条件的数字p: 最低p = a p是2的幂 我确信有一个更好的解决方案,使用按位运算符. 你有更好的解决方案吗? unsigned int closest_pow2(unsigned int a){ if (a == 0 || a 1024) return 0; //error,never h
给定无符号整数a(小于或等于1024),我需要找到满足以下条件的数字p:

>最低p> = a
> p是2的幂

我确信有一个更好的解决方案,使用按位运算符.
你有更好的解决方案吗?

unsigned int closest_pow2(unsigned int a)
{
  if (a == 0 || a > 1024) return 0; //error,never happen
  if (a == 1) return 1;
  if (a == 2) return 2;
  if (a <= 4) return 4;
  if (a <= 8) return 8;
  if (a <= 16) return 16;
  if (a <= 32) return 32;
  if (a <= 64) return 64;
  if (a <= 128) return 128;
  if (a <= 256) return 256;
  if (a <= 512) return 512;
  if (a <= 1024) return 1024;
}

解决方法

以下是没有相对昂贵的条件语句或循环:

unsigned next_power_of_two(unsigned int x) {
   x = x - 1; 
   x = x | (x >> 1); 
   x = x | (x >> 2); 
   x = x | (x >> 4); 
   x = x | (x >> 8); 
   return x + 1; 
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读