2015-09-14 2 views
2

Я наткнулся на этот кусок кода без каких-либо комментариев:Какой смысл в этой xor-магии определить верхнюю границу цикла?

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 на каждой итерации.

Это какой-то известный узор? Что оно делает?

+0

Невероятно, что вам было 30 лет, в этом случае кажется, что кому-то скучно или является одним из тех математических ученых, поэтому задержка умножается на 3 в конце цикла lol, он хотел, чтобы это было как задержка будет 5 .. тогда 15 .. тогда, наконец, 30, но он все еще только 5,15, то 45, вероятно, хотел, чтобы он выполнял 3 раза вместо 2. – SSpoke

+0

Yuk. Я бы установил это на что-то не глупое, то есть «maxDelay = 30», или, действительно, 243, если он хотел использовать оператор мощности. –

+4

Возможно, он хотел сделать «Math.Pow (3, 5)» и был ленив сделать это с помощью calc (и написал это, не зная, что это xor) –

ответ

3

Он имел в виду Math.Pow(3, 5), но ^ не является силовым оператором (которого нет в C#). Это ошибка.

Это имеет смысл, потому что в цикле он возрастает delay экспоненциально. Таким образом, экспоненциальная верхняя граница имеет смысл.

Я думаю, что это плохой стиль, даже если он сработает. Не очевидно, как часто цикл будет работать. Он должен был использовать обычный цикл цикла и вычислять delay только что внутри цикла вместо того, чтобы запускать его по циклу постепенно.

+0

Em ... В чем проблема с увеличением задержки внутри цикла? – sharptooth

+0

Он скрывает, что означает значение на каждой итерации цикла. Ваше намерение состоит в том, что это значение Math.Pow (3, i). Тогда скажи так! Не запутывайте работу с питанием, вычисляя ее через N умножений. Плохой стиль, трудно следовать. Просто 'var delay = Math.Pow (3, i);'. – usr

 Смежные вопросы

  • Нет связанных вопросов^_^