Можете ли вы объяснить этот код для меня с точки зрения непрофессионала?

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

Можете ли вы объяснить, что это значит? В основном первая часть.

if((x & 1) == 0)
    printf("EVEN!\n");
else
    printf("ODD!\n");

3 ответа

Это побитовая операция. Операция AND маскирует каждый бит и оставляет последний. Если последний бит выключен (вы проверяете ноль), это означает, что это даже в противном случае означает, что он нечетный.

Пример:

125 в двоичном виде - 01111101

так

01111101 AND
00000001 =
------------
00000001 

так 125 это НДД:)

Альтернативный способ проверить четное или нечетное - использовать модуль деления:

if (x % 2 == 0) printf("EVEN");
else printf("ODD");

Как отметил пользователь в комментарии ниже, это второе решение медленнее (с точки зрения µS)

Как указано в другом ответе, это побитовая операция, но тест на самом деле, если последний бит установлен, это ODD, следовательно, ==0, Поэтому, если последний бит НЕ установлен, это ДАЖЕ.

РЕДАКТИРОВАТЬ: Просто увидел, что ответ был удален, ну хорошо.

Более простой способ сделать это:

if( x % 2 == 0 )
{
  printf("EVEN!\n");
}
else
{
   printf("ODD!\n");
}

%, Или оператор модуля, возвращает остаток.

http://msdn.microsoft.com/en-us/library/0w4e0fzs.aspx

Другие вопросы по тегам