需要逻辑解释

web*_*ius 0 c

我的问题类似于这里的问题

这个问题的最佳答案是:

int isNotZero(unsigned int n){
  n |= n >> 16;
  n |= n >> 8;
  n |= n >> 4;
  n |= n >> 2;
  n |= n >> 1;
  return n & 1;
};
Run Code Online (Sandbox Code Playgroud)

有谁能解释一下上面的算法是如何工作的?

Cho*_*ett 6

n是一个32位整数.n |= n >> 16获取16个最高位并确保较低16中的等效位为较高16中的每个设置位设置; 同时保持已经设置在较低16位的任何位.

通过这种方式,您现在有一个16位整数,当原始的32位整数是精确的时,它是非零的.然后,以下步骤同样将数字折叠为8位,然后是4,然后是2,然后是1.

最后,最后一行检查是否设置了最低位,通过上面的方法告诉您原始数字是否为非零.