2016-05-11 2 views
-4

Как определить, является ли заданное число нечетным/четным без использования %, / или побитовыми операторами?Как найти четное/четное число без арифметических операторов в C?

+1

Какова мотивация для этого? Домашнее задание ? Интервью вопрос? Что-то другое ? –

+4

Пожалуйста, покажите свое исследование до времени. Сначала прочитайте страницу [Ask]. –

+1

Любое четное число содержит любую из цифр «0, 2, 4, 6, 8' в качестве последней цифры. Возьмите массив, поместите это число и попытайтесь выяснить, каким будет следующий шаг. – haccks

ответ

2

Предполагая ИНТ 32 бита:

bool even(int x) { 
    return !(((unsigned int)x)*0x80000000); 
} 

Это работает путем сдвига всех битов, кроме наименее значительным из 32 битов междунар, поэтому после того, что у вас есть 0x80000000 для нечетных чисел или 0 для четных номера. Он преобразуется в bool и отрицается.


Как Paul R указывает ИНТ комментарий, портативная версия будет использовать INT_MIN вместо 0x80000000

+0

Это очень специфичный для машины. В наши дни большинство процессоров имеют 64 бита в int ... – haavee

+2

@haavee: на самом деле [большинство 64-битных систем LP64] (https://en.wikipedia.org/wiki/64-bit_computing#64-bit_data_models), где ' int' все еще 32 бит. –

+0

Вы правы. Но, к сожалению, это не дает мне ответа. – haavee

1

Отдел ничего, но повторил вычитание:

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; 
} 
+0

Он говорил * без арифметических операторов *? – haccks

+0

Нет, ничего о арифметических операторах. Отрицательный или положительный также не упоминался, но должен быть легко закреплен. – haavee

+1

Название и вопрос непоследовательны - заголовок говорит «арифметика», но в вопросе говорится «%,/или побитовые операторы». OP должен решить свой вопрос, чтобы сделать его более ясным. –