17 марта 2007 г.

Задачи на собеседованиях: биты и байты


  1. Написать программу, которая переворачивает порядок бит в байте. То есть, из 0xE2 (11100010) нужно получить 0x47 (01000111).

  2. То же самое, но без использования циклов.

    Подсказка:
    Если нас не интересуют циклы, то разумное объяснение этому - жесткие требования к производительности. Когда существуют требования к производительности, то всегда можно чем-то пожертвовать, например, памятью.

2 комментария:

  1. по идее и цикл не нужен и жертвовать особо ничем не надо...
    что-то типа такого:
    a = ((a & 0xAA)>>1)|((a & 0x55)<<1);
    a = ((a & 0xCC)>>2)|((a & 0x33)<<2);
    a = ((a & 0xF0)>>4)|((a & 0x0F)<<4);

    описано в книге Hackers' delight (Henry S. Warren)

    ОтветитьУдалить
  2. Круто, конечно.

    Только, кажется, на производитльность все-таки повлияет.

    ОтветитьУдалить