Няшная / Говнокод #28998 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
int iseven(long long int number)
{
	struct Num {
		unsigned int x:1;
		unsigned int y:31;
		unsigned int z:32;
	} num = (*(struct Num*)(&number));
	return num.x; //Если результат 1, то нечётное.
}

Функция определения чётности числа посредством возврата младшего бита.

Запостил: TurboLyudoed TurboLyudoed, (Updated )

Комментарии (6) RSS

  • Если в long long int не 64 бита, сломается. Надо было int64_t...

    И вообще что стандарт говорит о порядке битовых полей?
    Ответить
    • > Если в long long int не 64 бита, сломается.
      Да.

      >И вообще что стандарт говорит о порядке битовых полей?
      Зависит от компилятора и свойств системы. В конкретно этом случае по умолчанию используется порядок от младшего к старшему.

      Так что этот код попросту непереносим.
      Ответить
      • Мне кажется, компилятор имеет право выровнять структру Num как угодно, не говоря уж о байт-ордере и о том, что размер лонга не регламентирован

        Это какой-то хак уровня borland c под дос

        Кстати, четность числа можно проверить энднув его с единицей. Если последний бит единица, то число нечетное, не? А еще есть % 2
        Ответить
        • Кстати, у 6502, 6510, 8080 не было ни умножения, ни деления, ни взятия остатка. Представляешь, какой тяжёлый рантайм для ЯП у них?

          Самое смешное, что у древнего PDP-11 умножение и деление есть.
          Ответить
          • Мы учили асемблер, незнавший команд умножения (С)


            Как сказал бы j2376234: всегда же можно намакроёбить. Ну правда, умножение можно заменить сложением и проверкой
            Ответить

Добавить комментарий

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8