Другие способы выполнения операции по модулю - PullRequest
5 голосов
/ 04 июля 2011

Некоторое время назад я видел где-то хитрость для выполнения операций по модулю с использованием битовых операторов.Но сейчас я никак не могу выполнить правильную операцию.Кто-нибудь знает, как это сделать?Из того, что я помню, это было быстрее, чем с использованием%.

Ответы [ 2 ]

10 голосов
/ 04 июля 2011

«Уловка» заключается в двоичном AND значении с 1. Любое нечетное число должно иметь первый бит, установленный в 1.

So

var foo = 7;

if( foo & 1 ) { // true
}

Использование побитового И имеет лучшую производительность практически на всех платформах / браузерах.

for(var loop = 0; loop < 10; loop++) {
    if( loop & 1 ) {
        console.log('I am ', loop, ' and I am odd!');
    }
}
8 голосов
/ 04 июля 2011

Вы можете сделать по модулю 2 ^ k (степень 2), добавив значение в (2 ^ k) -1.

...