我的老师说这是javascript,如果有帮助
function mystery(x) {
x--;
x|= x>> 1;
x|= x>> 2;
x|= x>> 4;
x|= x>> 8;
x|= x>> 16;
x++;
return x;
}
答案 0 :(得分:3)
它找到2的最低幂,大于或等于x
。或者,x--
之后的所有内容都会找到x-1
中所有内容的最低位。
例如,如果您有x - 1
00010100111010100001010011101010
然后mystery(x)
将是
00100000000000000000000000000000
它首先填充一个后面的所有零,将右边的那些零折叠起来;在第一次操作之后,每个人都会有一个跟随它。然后我们折叠两位组:每两个组现在将变为四组。然后我们折四,然后八折。然后我们拿出十六位的大锤子。
00010100111010100001000000001100 // x - 1
00011110111111110001100000001110 // after folding one bit
00011111111111111101111000001111 // after 2
00011111111111111111111111101111 // after 4
00011111111111111111111111111111 // after 8, and every step thereafter
在这里,x++
会将所有1切换为零,使一个进位到下一列:
00100000000000000000000000000000 // after x++
开始时的奇怪减量是我们抓住<=
而不是严格<
。例如,如果我们从
00000000000000000000000000000100 // x
00000000000000000000000000000011 // after x--
00000000000000000000000000000011 // after folding, unchanged - they're all ones anyway
00000000000000000000000000000100 // after x++
答案 1 :(得分:1)
声明
x>> 1;
x|= x>> 1;
x >> 1
对x
的结果执行按位OR运算,并将结果存储在x
答案 2 :(得分:1)
函数mystery(x)
获得数字x
中2的最高幂。如果数字已经是2的幂,则初始递减语句(x--
)使函数返回相同的值。mystery(x)
在接近{{INT_MAX_VALUE
时将对有符号整数表示有趣 1}}。
您可以通过绘制x