首页 养生问答 疾病百科 养生资讯 女性养生 男性养生

java 算法

发布网友

我来回答

5个回答

热心网友

我想,你大概是说,由用户输入一个大于1的正数,然后判断这个数在2的上一个幂和下一个幂之间,然后把这个正数重新赋值为2的下一个幂,是吗?而且你是说java算法是吧,java算法里,我不记得有位移算法,但是如果我上面的猜测不错的话,那么答案应该是这样的代码:

追问代码不能超过一行

热心网友

void GetHighBinary(Integer num) {
int n = 1;
//如果num为0则最终num也为0
if (num == 0)
return;
//如果num包含不止1个1则其需要比最高为再多向右移1位,
//如11B最后会等于100B,如101B最后会等于1000B
if (num & (num -1)!=0) {
n << 1;
}
//num的最高为为多少则n继续移动多少位
do {
n = n << 1;
num = num>>1;
}while(num) ;

//最终num的值等于n

num = n;
}追问代码不能超过一行。

追答num即为要求的数,如下所示一行for循环语句即可。
for(int i = 0xfffffffe,num = (num & (num -1) != 0) ? num << 1: num; num & (num -1) != 0; num = num & i,i = (i << 1) + 1) ;

热心网友

num=(num>(2<<0) && num <=(2<<1))?(2<<1):(2<<0);
通过三目运算符和计算机存储整数的本质是二进制,通过修改二进制偏移位数即可实现。

热心网友

Math.pow(2,Math.ceil(Math.pow(a, 0.5)));换了一种思路去实现你的算法,不知道符不符合你的要求,a为传进来的值,为double类型追问你这样就不是位移算法了,如果做一千万亿次运算会卡死的。

追答int i=1;while(i<a){i=i<<1;}a为传进来的值,这个可以吧,最后i就是你要的值啦

热心网友

没太明白要求。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com