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

    +133

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    if((i & 0x01)!=0) addr |= 0x80; else addr &= ~0x80;
    if((i & 0x02)!=0) addr |= 0x40; else addr &= ~0x40;
    if((i & 0x04)!=0) addr |= 0x20; else addr &= ~0x20;
    if((i & 0x08)!=0) addr |= 0x10; else addr &= ~0x10;
    if((i & 0x10)!=0) addr |= 0x08; else addr &= ~0x08;
    if((i & 0x20)!=0) addr |= 0x04; else addr &= ~0x04;
    if((i & 0x40)!=0) addr |= 0x02; else addr &= ~0x02;
    if((i & 0x80)!=0) addr |= 0x01; else addr &= ~0x01;

    Перестановка бит в обратном порядке.

    Запостил: govnokod3r, 05 Сентября 2012

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

    • Как-то так это делалось за log2(количестваБит) строчек:
      i = (i & 0x55) << 1 | (i & 0xAA) >> 1
      i = (i & 0x33) << 2 | (i & 0xCC) >> 2;
      i = (i & 0x0F) << 4 | (i & 0xF0) >> 4;
      http://ideone.com/RvNto
      Ответить
    • Помню, у нас на лабах кто-то подобное писал. Самые хитрожопые делали что-то вроде
      strReverse(byteToBin(byte))
      Ответить
    • Всё уже давно придумали.

      http://graphics.stanford.edu/~seander/bithacks.html#BitReverseObvious

      На правах Кэпа сообщу, что по ссылке ниже по тексту идут более хитровыебанные методы.
      Ответить

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