1. Си / Говнокод #17292

    +135

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    int log2_floor (unsigned x)
    {
        #define NIMHTNOE0WNM(n) (((~(x>>n)+1)>>n)&n)
     
        int res, n;
     
        n = NIMHTNOE0WNM(16); res  = n; x >>= n;
        n = NIMHTNOE0WNM( 8); res |= n; x >>= n;
        n = NIMHTNOE0WNM( 4); res |= n; x >>= n;
        n = NIMHTNOE0WNM( 2); res |= n; x >>= n;
        n = NIMHTNOE0WNM( 1); res |= n;
        return res;
    }

    Кто-то Воррена перечитал.

    Запостил: codemonkey, 11 Декабря 2014

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

    • Если пять раз повторить NIMHTNOE0WNM, можно вызвать Ктулху.

      БЕЗН0ГNМ
      Ответить
    • http://stackoverflow.com/a/21443178
      Уоррен не советовал писать макросы с такими именами.
      Ответить
      • >that we will shorten to NIMHTNOE0WNM for readability.
        Ha ha ha oh wow.
        Ответить
        • #define N_IF_MSB_HIGHER_THAN_N_OR_ELSE_0(n) (((-(x>>n))>>n)&n)
          #define N_IF_MSB_HIGHER_THAN_N_OR_ELSE_0_WITH_NO _MINUS(n) (((~(x>>n)+1)>>n)&n)

          Чел знает толк в нейминге, да. Имя макроса длиннее тела в несколько раз.
          Ответить
          • Сократишь - не нравится, не сократишь - не нравится. Остальные ответы там вообще из магических чисел состоят.
            Ответить
    • #undef'нули бы хоть в конце...
      Ответить

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