Можете ли вы объяснить этот код для меня с точки зрения непрофессионала?
Я делаю проект, где мне нужен код, чтобы определить, является ли ввод нечетным или нет. (Я также должен быть в состоянии определить, является ли это даже
Можете ли вы объяснить, что это значит? В основном первая часть.
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");
}
%, Или оператор модуля, возвращает остаток.