Как определить, является ли заданное число нечетным/четным без использования %
, /
или побитовыми операторами?Как найти четное/четное число без арифметических операторов в C?
ответ
Предполагая ИНТ 32 бита:
bool even(int x) {
return !(((unsigned int)x)*0x80000000);
}
Это работает путем сдвига всех битов, кроме наименее значительным из 32 битов междунар, поэтому после того, что у вас есть 0x80000000
для нечетных чисел или 0
для четных номера. Он преобразуется в bool
и отрицается.
Как Paul R указывает ИНТ комментарий, портативная версия будет использовать INT_MIN
вместо 0x80000000
Это очень специфичный для машины. В наши дни большинство процессоров имеют 64 бита в int ... – haavee
@haavee: на самом деле [большинство 64-битных систем LP64] (https://en.wikipedia.org/wiki/64-bit_computing#64-bit_data_models), где ' int' все еще 32 бит. –
Вы правы. Но, к сожалению, это не дает мне ответа. – haavee
Отдел ничего, но повторил вычитание:
bool even(int number) {
// INT_MIN in 2's complement is always even
if(number==INT_MIN)
return true;
else if(number<0)
number = -number;
while(number>1)
number -= 2;
return number==0;
}
Он говорил * без арифметических операторов *? – haccks
Нет, ничего о арифметических операторах. Отрицательный или положительный также не упоминался, но должен быть легко закреплен. – haavee
Название и вопрос непоследовательны - заголовок говорит «арифметика», но в вопросе говорится «%,/или побитовые операторы». OP должен решить свой вопрос, чтобы сделать его более ясным. –
Какова мотивация для этого? Домашнее задание ? Интервью вопрос? Что-то другое ? –
Пожалуйста, покажите свое исследование до времени. Сначала прочитайте страницу [Ask]. –
Любое четное число содержит любую из цифр «0, 2, 4, 6, 8' в качестве последней цифры. Возьмите массив, поместите это число и попытайтесь выяснить, каким будет следующий шаг. – haccks