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

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
static inline int getKey(short int high, short int low)
{
    return (((int)high)<<16)+(int)low;
}

static inline short getHigh(int pKey)
{
    return (short)(pKey>>16);
}

static inline short getLow(int pKey)
{
    return (short)(pKey&0x00000000FFFFFFFF);
}

вот так. getHigh() оставил для полноты.

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

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

  • всё - так и задумано, как signed?
    getLow - всё равно обрежется, возможно даже компилятор соптимизирует
    Ответить
    • > всё - так и задумано, как signed?

      судя по getKey() - нет 🙂
      а может быть и да.
      задумайся: что произойдет если в low будет верхний бит установлен?

      > getLow

      да. но константа для обрезания в short радует.
      Ответить
      • >константа для обрезания в short

        128-битный процессор? 🙂
        Ответить
    • Кстати, вспомнилось про оптимизации. Как-то тестировал вот такой код на gcc:
      uint32_t a = ..., b = ...;
      uint64_t x = a;
      uint64_t y = b;
      uint64_t r = x*y;
      uint32_t high = (r >> 32) & 0xFFFFFFFF;
      uint32_t low = r & 0xFFFFFFFF;

      Так gcc весь этот код превратил в один mul, который тут и задумывался 😉

      Так что, видимо, компилятор просто выкинет эту маску в getLow.
      Ответить
    • | для лохов 😉 Настоящие погромисты совмещают биты только сложением.
      Ответить

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

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

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


    8