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

Why bitwise operators are popular in sport programming

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

这是一个例子。

Write a function, which finds a difference between two arrays (consider that they differ by one element).

解决办法是:

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. 按位运算比普通运算更快吗?

更新: 我不完全理解为什么我的问题被标记为与 ~~ vs parseInt 重复。很高兴知道为什么这个运算符会替换 parseInt 并且可能对体育节目有帮助。但它没有回答我的问题。

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

按位运算符不一定更快,但通常足够快。它们简洁明了(通常更难阅读,但这是副作用)。

~~parseInt with a considerable number of remarks 的更短(并且通常更先进)的替代方法。在常规 (non-golf) 代码中,仅当它提供比 parseInt 或 performance-sensitive 上下文更理想的行为时才应使用它。

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