求一个数的临近的较大的2的整数次幂
时间:2022-07-26
本文章向大家介绍求一个数的临近的较大的2的整数次幂,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
被面试官问了这么一道题..........一问,想到,左移就好了。
就会很自然的写下这种方法
unsigned int f2(unsigned int val)
{
int retval = 1;
while (retval < val)
{
retval <<= 1;
}
return retval;
}
在改进一下,就判断他是不是2的次方先。如果是的话,可以直接返回。就可以得到这种方法。面试官又说,不能用循环递归,函数库。这下麻烦了。
unsigned int f1(unsigned int val)
{
if (val & (val - 1))//至少有两个为1的bit位
{
unsigned int leftmost;
while (val)
{
leftmost = val;
val &= (val - 1);
}
return leftmost << 1;
}
else
{
return val == 0 ? 1 : val;
}
}
想想,如果一个数,00101 如果能找到 00100的话就好了,这样在左移一位就完事了,但是想得时候就想要求地00100的话,不就要循环了。然后就卡住了。
接着看到这个 http://blog.codingnow.com/2011/12/buddy_memory_allocation.html
就得知,还可以这么写....溜到不行。把这个数,从高位数,第一个1的右边填满,再加1...溜溜溜溜的。
unsigned int f3(unsigned int val){
{
if (val & (val - 1)){
val |= val>>1;
val |= val>>2;
val |= val>>4;
val |= val>>8;
val |= val>>16;
return val+1;
}else{
return val == 0 ? 1 : val;
}
}
}
- WCF技术剖析之二十七: 如何将一个服务发布成WSDL[编程篇]
- 浅谈反馈式按钮的设计与实现
- 对比手游和PC游戏的发展,小程序会成为手游开发的热点?
- 雷军旗下金山云再获融资2.2亿美元
- WCF技术剖析之二十五: 元数据(Metadata)架构体系全景展现[WS标准篇]
- zookeeper配置详解
- WCF技术剖析之二十五: 元数据(Metadata)架构体系全景展现[元数据描述篇]
- zookeeper命令行(zkCli.sh&zkServer.sh)使用及四字命令
- [WCF的Binding模型]之三:信道监听器(Channel Listener)
- zookeeper监控告警
- 扩展ToolBarManager、ListView和Grid控件以实现气球式的ToolTip
- Linux同步机制 - 基本概念(死锁,活锁,饿死,优先级反转,护航现象)
- Linux同步机制 - 多线程开发总结
- 谷歌发布升级版语音合成系统,直接从字符合成语音
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法