如何在java中实现把一个数变成2的N次幂
比如我输入一个数:11,它不是2的N次幂,我想得到2的4次方16.请教高手,在Java中怎么实现。。...
比如我输入一个数:11,它不是2的N次幂,我想得到2的4次方16.
请教高手,在Java中怎么实现。 。 展开
请教高手,在Java中怎么实现。 。 展开
7个回答
展开全部
你这个要求跟HashMap源码中的tableSizeFor 这个方法完成的功能完全吻合,Java源搭宏枝码就不需要我去跟你说效率如何,正确性如何了吧?直接知敏上源码:
static final int tableSizeFor(int cap) {
int n = cap - 1;
n |= n >>> 1;
n |= n >>> 2;
n |= n >>> 4;
n |= n >>> 8;
n |= n >绝型>> 16;
return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;
}
MAXIMUM_CAPACITY是默认HashMap的容量16,这种算法得到的值始终是比cap值大一些的2的幂次方,具体原理可以百度去理解。
static final int tableSizeFor(int cap) {
int n = cap - 1;
n |= n >>> 1;
n |= n >>> 2;
n |= n >>> 4;
n |= n >>> 8;
n |= n >绝型>> 16;
return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;
}
MAXIMUM_CAPACITY是默认HashMap的容量16,这种算法得到的值始终是比cap值大一些的2的幂次方,具体原理可以百度去理解。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你晌耐升可以看看HashMap 源宴老码 这个函数
static final int tableSizeFor(int cap) {
int n = cap - 1;
n |= n >>> 1;
n |= n >>> 2;
n |= n >>> 4;
n |= n >亩肆>> 8;
n |= n >>> 16;
return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;
}
static final int tableSizeFor(int cap) {
int n = cap - 1;
n |= n >>> 1;
n |= n >>> 2;
n |= n >>> 4;
n |= n >亩肆>> 8;
n |= n >>> 16;
return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询