繁体   English   中英

谁能解释以下代码的作用以及如何工作?

[英]Could anyone please explain what the following code does and HOW it works?

我的老师说这是javascript,如果有帮助

function mystery(x) { 
  x--; 
  x|= x>> 1; 
  x|= x>> 2; 
  x|= x>> 4;
  x|= x>> 8; 
  x|= x>> 16; 
  x++; 
  return x; 
}

它找到两个大于或等于x的最低幂。 或者, x--之后的所有内容都将找到x-1中所有内容中剩下的最低位。

例如,如果您有x - 1作为

00010100111010100001010011101010

那么mystery(x)将是

00100000000000000000000000000000

它首先将右边的零折叠起来,以填充一个后跟的所有零。 第一次操作后,每个人都会跟随一个。 然后,我们折叠两位的组:现在每两个将变为四个。 然后我们折四折,然后八折。 然后,我们取出16比特的大锤子。

00010100111010100001000000001100  // x - 1
00011110111111110001100000001110  // after folding one bit
00011111111111111101111000001111  // after 2
00011111111111111111111111101111  // after 4
00011111111111111111111111111111  // after 8, and every step thereafter

在这里, x++会将所有的都切换为零,使一个进位到下一列:

00100000000000000000000000000000  // after x++

一开始的怪异递减是,所以我们抓住<=而不是strict < 例如,如果我们从

00000000000000000000000000000100  // x
00000000000000000000000000000011  // after x--
00000000000000000000000000000011  // after folding, unchanged - they're all ones anyway
00000000000000000000000000000100  // after x++

该声明

x>> 1; 
  • 将x以二进制表示形式向右移1位,丢弃移开的位

x|= x>> 1;

  • xx >> 1的结果执行按位或运算,并将结果存储在x

函数mystery(x)获得数字x的第二高幂。 如果数字已经是2的幂,则初始的减量语句( x-- )使函数返回相同的值。在接近INT_MAX_VALUE时, mystery(x)对于带符号整数将表现出有趣INT_MAX_VALUE

您可以通过为x较小值绘制函数值来得出此答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM