为什么按位运算符在体育节目中很受欢迎

时间:2017-01-30 22:56:55

标签: ecmascript-6 language-agnostic bitwise-operators

我是体育节目服务之一的新手,发现获奖解决方案通常使用按位运算符。

这是一个例子。

  

编写一个函数,找到两者之间的差异   数组(考虑它们因一个元素而不同)。

解决方案是:

let s = x => ~eval(x.join`+`);
let findDiff = (a, b) => s(b) - s(a);

let findDiff = (a, b) => eval(a.concat(b).join`^`);

我想知道:

  1. 这两个例子的解释(按位部分)。
  2. 在十进制数上使用按位运算符有什么好处?
  3. 使用按位操作而不是正常操作更快?
  4. 更新: 我不完全理解为什么我的问题被标记为~~ vs parseInt的副本。很高兴知道,为什么这个运算符替换parseInt并且可能对运动编程有帮助。但它没有回答我的问题。

1 个答案:

答案 0 :(得分:1)

Code golf并不专注于按位运算符,而是代码长度。

按位运算符不需要更快,但通常足够快。它们简洁(通常难以阅读,但副作用)。

~~parseInt with a considerable number of remarks的较短(通常更具信息性)替代品。在常规(非高尔夫)代码中,只有当它提供比parseInt或性能敏感的上下文更合适的行为时,才应该使用它。

~a大致等于parseInt(a) * -1 - 1。在此特定示例~~a中,它可以用作s(b) - s(a)的较短替代,因为* -1 - 1部分在减法时被消除(应考虑符号)。