为什么按位运算符在体育节目中很受欢迎
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`^`);
我想知道:
- 这两个例子的解释(按位部分)。
- 对十进制数使用按位运算符有什么好处?
- 按位运算比普通运算更快吗?
更新:
我不完全理解为什么我的问题被标记为与 ~~ 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
部分在减法时被消除(应考虑符号)。
我是一项体育节目服务的新手,发现获胜的解决方案通常使用按位运算符。
这是一个例子。
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`^`);
我想知道:
- 这两个例子的解释(按位部分)。
- 对十进制数使用按位运算符有什么好处?
- 按位运算比普通运算更快吗?
更新:
我不完全理解为什么我的问题被标记为与 ~~ 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
部分在减法时被消除(应考虑符号)。