Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проверить Четность (https://javascript.ru/forum/misc/30018-proverit-chetnost.html)

Cesdo 20.07.2012 22:28

Проверить Четность
 
Добрый вечер. Подскажите, как проверить четность. мой вариант if (i % 2 = 0 ) компилятор не принимает - Error on line 2: Bad left-hand side of assignment

Hekumok 20.07.2012 23:45

Cesdo, когда сравниваете нужно использовать '==', например
if (a == b) {
// код
}

А '=' нужно использовать при присвоении, например
var a = b ;

nerv_ 21.07.2012 12:29

приехали
Цитата:

Сообщение от Cesdo
Проверить Четность

читаю как проверить чесТность :D

Cesdo 21.07.2012 15:27

ахахахах, Hekumok, спасибо большое!)

Cesdo 21.07.2012 15:29

И Дзен-трансгуманист

devote 21.07.2012 15:48

var a = 2;
if ( a & 1 ) {
    alert( "нечетно" );
} else {
    alert( "четно" );
}

var a = 235;
if ( a & 1 ) {
    alert( "нечетно" );
} else {
    alert( "четно" );
}
но это для целых чисел

FINoM 21.07.2012 16:25

devote, как-то сложно.
if( a%2 ) alert('нечет')

devote 21.07.2012 16:28

Цитата:

Сообщение от FINoM
devote, как-то сложно.

сложно в чем? символ "&" сложный чтоль?

FINoM 21.07.2012 16:33

Цитата:

Сообщение от devote
сложно в чем? символ "&" сложный чтоль?

Не очевидно.

devote 21.07.2012 16:58

Цитата:

Сообщение от FINoM
Не очевидно.

дело тут не в очевидности, оператор "%" сравнивает число с учетом остатка, то-есть он и возвращает остаток от числа, и если остаток присутствует то число становится нечетным. А оператор "&" не обращает внимание на остатки. К примеру есть число 2.2 вот для оператора "&" оно будет четным, так как он отбросит остатки и не будет их учитывать. А оператор "%" посчитает число нечетным, так как учитывает остаток.

bes 21.07.2012 17:21

devote, насколько я знаю, понятие чётности относится только к целым числам, не?

nerv_ 21.07.2012 17:46

Цитата:

Сообщение от FINoM
Не очевидно.

да не, нормально. Используется двоичное представление числа. Чтобы было очевидным, можешь в Math добавить : )

bes, да

Math.isEven = function( num ) {
	return !( num & 1 );
};

Math.isOdd = function( num ) {
	return !!( num & 1 );
};

alert( Math.isEven( 11 ) );
alert( Math.isOdd( 11 ) );

devote 21.07.2012 18:01

Цитата:

Сообщение от bes
devote, насколько я знаю, понятие чётности относится только к целым числам, не?

ну дык поэтому я и юзаю везде оператор &, что бы оперировать тока с целыми

melky 22.07.2012 09:40

Цитата:

Сообщение от nerv_ (Сообщение 190533)
да не, нормально. Используется двоичное представление числа. Чтобы было очевидным, можешь в Math добавить : )

bes, да

Math.isEven = function( num ) {
	return !( num & 1 );
};

Math.isOdd = function( num ) {
	return !!( num & 1 );
};

alert( Math.isEven( 11 ) );
alert( Math.isOdd( 11 ) );



Math.isEven = function( num ) {
	return !( num & 1 );
};

Math.isOdd = function( num ) {
*!*
	return !Math.isEven(num);
*/!*
};


не сдержался :)

Цитата:

Сообщение от devote (Сообщение 190514)
сложно в чем? символ "&" сложный чтоль?

он такой загадочный :-?

devote 22.07.2012 09:46

Цитата:

Сообщение от melky
не сдержался

да но лишний вызов функции в данном случае ни к чему.

devote 22.07.2012 09:53

Цитата:

Сообщение от melky
он такой загадочный

и я понять не могу что в нем не очевидного то? обычное битовое И, проверяет присутствие указанного бита. В нашем случае присутствие первого бита. И если есть первый бит то число однозначно нечетное.

leko 22.07.2012 22:29

Цитата:

Сообщение от devote
и я понять не могу что в нем не очевидного то?

имхо, неочевидное выражение
не знаю как в js, но в других ЯП такую оптимизацию делает компилятор/интерпретатор
x % 2 == 0 => x & 1

devote 22.07.2012 22:51

Цитата:

Сообщение от leko
но в других ЯП такую оптимизацию делает компилятор/интерпретатор

это я в курсе, и это не ответ на вопрос:
Цитата:

Сообщение от devote
и я понять не могу что в нем не очевидного то?


melky 22.07.2012 23:21

Цитата:

Сообщение от devote (Сообщение 190657)
да но лишний вызов функции в данном случае ни к чему.

однако, это лучше дублирования кода ;)

Цитата:

Сообщение от devote (Сообщение 190659)
и я понять не могу что в нем не очевидного то? обычное битовое И, проверяет присутствие указанного бита. В нашем случае присутствие первого бита. И если есть первый бит то число однозначно нечетное.

со школы мы привыкли, что чётное число - число, делящееся на два без остатка, в этом и суть.

а альтернативные пути через биты приходят уже со временем.

devote 22.07.2012 23:38

Цитата:

Сообщение от melky
однако, это лучше дублирования кода

спору нет, но не в этом случае... нет смысла вызывать функцию, ради a & 1

nerv_ 23.07.2012 12:14

Цитата:

Сообщение от melky
не сдержался

:)
Цитата:

Сообщение от leko
имхо, неочевидное выражение

Цитата:

Сообщение от nerv_
Чтобы было очевидным, можешь в Math добавить : )


Цитата:

Сообщение от melky
со школы мы привыкли, что чётное число - число, делящееся на два без остатка, в этом и суть.

компьютеру это объясни. Желательно на языке ассемблер )

bes 23.07.2012 12:25

Если не знаешь решения, но знаешь определение чётности/нечётности, то первый способ логично первым приходит на ум, так как напрямую отображает это определение, а если знаешь решение (оба способа), то какая разница, какой из них использовать (оба не сильно затратные).

Hekumok 27.07.2012 11:35

Цитата:

Сообщение от nerv_ (Сообщение 190449)
приехали

читаю как проверить чесТность :D

ХаХ! Также прочитал)))

devote 27.07.2012 15:42

Цитата:

Сообщение от Maxmaxmахimus
number % 2

ты бы тему почитал для начала всю, перед тем как это постить.


Часовой пояс GMT +3, время: 17:23.