发布网友
共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就是你要的值啦
热心网友
没太明白要求。