定义循环上限的异或魔术有什么意义?
What's the point in this xor magic defining the upper bound of a loop?
我在没有任何评论的情况下偶然发现了这段代码:
int delay = 5;
int maxDelay = 5 * (3 ^ 5); // << what's this xor magic?
while( Something && delay < maxDelay ) {
Thread.Sleep( delay );
delay *= 3;
}
3 ^ 5
有什么意义?那是“3 xor 5”,也就是六,没有什么有趣的东西,比如 Int32.MaxValue
的三分之一。为什么不直接写 6
呢?我想它必须与这样一个事实有关,即结果随后乘以 5
,并且在每次迭代中该值也乘以 3
。
这是一些众所周知的模式吗?它有什么作用?
他的意思是 Math.Pow(3, 5)
但 ^
不是幂运算符(C# 中不存在)。这是一个错误。
这是有道理的,因为在循环中他正呈指数增长 delay
。所以指数上限是有道理的。
我认为这种风格很糟糕,即使它奏效了。循环将 运行 的频率并不明显。他应该使用普通的 for 循环并在循环内重新计算 delay
而不是 运行 沿着循环递增地计算它。
我在没有任何评论的情况下偶然发现了这段代码:
int delay = 5;
int maxDelay = 5 * (3 ^ 5); // << what's this xor magic?
while( Something && delay < maxDelay ) {
Thread.Sleep( delay );
delay *= 3;
}
3 ^ 5
有什么意义?那是“3 xor 5”,也就是六,没有什么有趣的东西,比如 Int32.MaxValue
的三分之一。为什么不直接写 6
呢?我想它必须与这样一个事实有关,即结果随后乘以 5
,并且在每次迭代中该值也乘以 3
。
这是一些众所周知的模式吗?它有什么作用?
他的意思是 Math.Pow(3, 5)
但 ^
不是幂运算符(C# 中不存在)。这是一个错误。
这是有道理的,因为在循环中他正呈指数增长 delay
。所以指数上限是有道理的。
我认为这种风格很糟糕,即使它奏效了。循环将 运行 的频率并不明显。他应该使用普通的 for 循环并在循环内重新计算 delay
而不是 运行 沿着循环递增地计算它。