【问题标题】:Logic explanation required需要逻辑解释
【发布时间】:2012-02-20 19:05:59
【问题描述】:

我的问题和here类似

这个问题的最佳答案是:

int isNotZero(unsigned int n){
  n |= n >> 16;
  n |= n >> 8;
  n |= n >> 4;
  n |= n >> 2;
  n |= n >> 1;
  return n & 1;
};

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

【问题讨论】:

    标签: c


    【解决方案1】:

    n 是一个 32 位整数。 n |= n >> 16 取最高 16 位,并确保为高 16 中的每个设置位设置低 16 中的等效位;同时保持已经在低 16 位中设置的所有位。

    通过这种方式,您现在有一个 16 位整数,与原始 32 位整数一样,它是非零的。然后以下步骤类似地将数字折叠为 8 位,然后是 4,然后是 2,然后是 1。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多