如何使用表格查询和XOR在二进制中计算1?

时间:2018-08-01 21:06:28

标签: javascript bitwise-operators lookup-tables

我需要计算一个整数的二进制表示形式中1的数量。 这两个要求是:

1)必须使用表查找 2)必须使用XOR按位运算符

到目前为止,我认为我可以进行表查找:

const generateLookupTable = (int) => {
  const range = Array.from({length: int}, (x,i) => i);
  const toBinary = (table, i) => {
    const binary = (i >>> 0).toString(2);
    table[i] = binary;
    return table;
  }

  const lookupTable = range.reduce(toBinary, {})
  return lookupTable;
};

这将打印出类似以下内容的内容:

generateLookupTable(7)
{0: "0", 1: "1", 2: "10", 3: "11", 4: "100", 5: "101", 6: "110"}

我很困惑如何使用XOR解决这个问题(或者为什么我什至要使用查找表)。我觉得我可以轻松地解决此问题,方法是将int转换为二进制,然后循环遍历每个字符并求和1。但是,这些要求使其变得困难。

1 个答案:

答案 0 :(得分:2)

这只是部分提示,但评论太长。使用XOR可以做的一件事是找到最右边的1。然后可以减去这个并在保持计数的情况下再次进行。这将告诉您一个数字中有多少个::

def some_action
  value_1 = yield step_1
  value_2 = yield step_2(value_1)
  return yield(step_3(value_2))
end 

def step_1
  if condition
    Success(some_value)
  else
    Failure(:some_error_code)
  end
end

def step_2
  if condition
    Success(some_value)
  else
    Failure(:some_error_code_2)
  end
end

也许有点帮助。不确定指示内容到底是什么。