Самый быстрый алгоритм
От: Cynic Россия  
Дата: 24.01.15 16:28
Оценка: :)
Помогите найти самый быстрый алгоритм для выполнения следующей операции.
Дано число типа byte, например 210, которое в двоичной форме выглядит как 11010010. Если считать биты слева на право, а индекс первого бита равен 1, то нужно извлечь из этого числа чётные биты и сформировать из него 4-х битное число.
Например:
210 (dec) -> 11010010 (bin)
Нужно извлечь биты выделенные полужирным и сформировать число 1100 (bin) -> 80 (dec).

Пробовал два алгоритма.
1)
    byte byteNum = 210;
    int num = (int)(byteNum) & 0x55;
        int num2 = (num & 64) / 8 + (num & 16) / 4 + (num & 4) / 2 + (num & 1);


2)
Сгенерировать все возможные 256 комбинаций пар ключ/значение, где ключ это искомое число, а значение результат преобразования.
Загрузить их в Hashtable и потом искать по ключу.

Второй способ в 3 раза медленнее первого. Но и первый способ не блещет производительность.
Какие ещё есть варианты.
:)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.