Как проверить число на чётность не чётность?

Статус
В этой теме нельзя размещать новые ответы.

Shopen

Новичок
Как проверить число на чётность не чётность?

Как проверить число на чётность не чётность?
 

phprus

Moderator
Команда форума
440hz
Необходимо только отметить, что если в последнем бите 0, то это число четное, а если 1 - то нечетное.
те:
( $var & 1 ) ? не четное : четное;
(работает только для целах чисел).

Craftman
Можно написать и так:
( $var%2 ) ? не четное : четное;
 

Crazy

Developer
IMHO, вариант от Craftman'а лучше остальных. Ибо:

1. В 99.9% случаев суммарная скорость скрипта будет та же, что и при использоании &.
2. Этот код наиболее читабельный
 

440hz

php.ru
Необходимо только отметить, что если в последнем бите 0, то это число четное, а если 1 - то нечетное
мне ближе то, что я написал, т.к. 1 нечетное и запись

if( $var & 1) {}

интуитивно подводит к мысли, что получим нечетное число в случае true, при наличии $var%2 подсознание возмущается ... и глаза становятся как этот процент

=)

имхо
 

phprus

Moderator
Команда форума
kruglov
Я кроме php пишу еще на С/С++ и perl. а java пока не изучал за ненадобностью для меня.

Crazy
Почитал Страуструпа. Бить палкой надо вас за такие высказывания.
Пояснение (цитата с. 175-176):
Если выражение в инструкции if не равно нулю, выполняется первая инструкция, в противном случае - вторая. Отсюда следует, что в качестве условия могут использоваться любые арифметические выражения и выражения с указателями. Например если x целое то if (x) означает if (x != 0)
Из этой цитаты видно что использовать выражения в условиях допустимо, и кроме этого я считаю что такая сокращенная запись более удобна для восприятия так как не надо смотреть, а с чеме же там будет сравниваться переменная (в нашем случае выражение).
 

Crazy

Developer
Автор оригинала: phprus
Почитал Страуструпа. Бить палкой надо вас за такие высказывания.
Не буду тебя уговаривать, ибо, судя по высказыванию, всерьез ты программированием на C не занимался.

Но если будешь вдруг устраиваться на работу по этому профилю -- перескажи эту историю на собеседовании. Потом расскажешь о результатах.

-~{}~ 30.08.06 22:06:

Автор оригинала: denver
Чего такого в ($var%2)
$var % 2 дает числовой результат. if ожидает булевское выражение. В PHP встроено множество правил неявного молчаливого преобразования типов и одно из них здесь сработает.

Но такие преобразования -- зло. И везде, где можно без ущерба от них отказаться -- нужно отказываться.

P.S. Надеюсь, не нужно объяснять, почему они - зло? Числа со строками случайно сравнивать уже доводилось?
 

denver

?>Скриптер
$var % 2 дает числовой результат.
Прелестно. Ну значит вот так будет абсолютно верно:
PHP:
if ((boolean)($var % 2)) ...
Только ни к чему это, когда особенность PHP в том что приведение делается автоматом. Так почему бы не получать от этого удовольствие?
 

phprus

Moderator
Команда форума
Crazy
Я не буду вас уговаривать читать книги людей которые точно умее вас, но сам я всегда так поступаю когда не знаю как что-либо работает.

Можите напомнить с какого времени С или С++ в if ожидает булевское выражение? Я еще вроде читать не разучился а в книге "Язык программирования С++" автор которой Бьерн Страуструп (надеюсь не надо объяснять кто это) черным по белому написано, что:
Если выражение в инструкции if не равно нулю, выполняется первая инструкция, в противном случае - вторая. Отсюда следует, что в качестве условия могут использоваться любые арифметические выражения и выражения с указателями. Например если x целое то if (x) означает if (x != 0)
Кроме этого в С НЕТ типа bool и соответственно if не может ожидать того, чего не поддерживает язык.

На счет php действительно был не прав. Просто уже некоторое время на нем не писал, а писал на С и С++.

Но если будешь вдруг устраиваться на работу по этому профилю -- перескажи эту историю на собеседовании.
Даже если и перескажу то это никак не повлияет ибо прав я. не верите почитайте умные книжки написанные умными людьми. (Например тем же Страуструпом) Или аргументируй почему я не прав.
 

Crazy

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

Особенно смешно, что ты рассказываешь мне, что такое if. :)

-~{}~ 30.08.06 23:48:

Автор оригинала: denver
Прелестно. Ну значит вот так будет абсолютно верно:
PHP:
if ((boolean)($var % 2)) ...
Это будет не "абсолютно верно", а "уже менее криво". В отличие от ($var % 2 == 0), который является совершенно ясным и понятным.

Нет, разумеется, кулхацкеры имеют право писать "типа оптимизированный" нечитабельный код только потому, что они кулхацкеры. Здесь других причин уже не нужно. :)

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

Так почему бы не получать от этого удовольствие?
Когда перестаешь писать простые скрипты -- кончается и удовольствие.
 

Vladson

Сильнобухер
В случае с РНР поддерживаю Crazy на все сто, если требуется bool то пусть он и будет, а вот с Си сомнения меня мучают

Специально открыл Кернигана (Страуструпа я не очень люблю)

Так как IF просто проверяет численное значение выражения, то возможно некоторое сокращение записи. Самой очевидной возможностью является запись
IF (выражение)
вместо
IF (выражение !=0)
 

Sender

Новичок
Crazy
если писать все подробно и правильно, со всеми проверками и т.п., то код пухнет на глазах, и это очень мешает
 

Crazy

Developer
Автор оригинала: denver
короче хватит подчиненных палкой бить, бейте их связкой страуструп-керниган повторяя:
Упомянутые тобой книги -- учебника языка C/C++ соответственно, а не руководство по программированию на C/C++. Почувствуй разницу.

-~{}~ 31.08.06 10:53:

Автор оригинала: Sender
если писать все подробно и правильно, со всеми проверками и т.п., то код пухнет на глазах, и это очень мешает
Тогда пиши на J. Охренительно компактный код. Только нефига потом не прочитаешь.

Код должен быть понятным для человека. Таким, чтобы он не был вынужден догадываться.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху