Первое значение:
У меня есть двоичное значение, которое на самом деле представляет собой компактную серию 2-битных значений. (То есть каждые 2 бита в двоичном значении представляют 0, 1, 2 или 3.) Так, например, 0, 3, 1, 2 становится 00110110.В этой двоичной строке все, что меня волнует, это 3 (или, альтернативно, я мог бы перевернуть биты и заботиться только о 0, если это облегчит ваш ответ). Все остальные числа не имеют значения (по причинам, которые мы рассмотрим чуть позже).
Второе значение:
У меня есть второе двоичное значение, которое также представляет собой сжатую серию 2-битных значений, представленных таким же образом. Он имеет ту же длину, что и первое значение.
Математика:
Мне нужна сумма 2-битных чисел во втором значении, которые имеют ту же позицию, что и 3 из первого значения. Другими словами, если бы у меня было:
First: 11000011
Second: 01111101
Тогда мой ответ был бы "2" (я сложил первое и последнее число из "Второго" вместе, потому что это были единственные, у которых было "11" в Первом Значение, которое соответствует им.)
Я хочу сделать это за как можно меньшее количество тактов (либо на графическом процессоре, либо на архитектуре x86). Однако я обычно ищу алгоритм, а не решение на ассемблере. Есть ли способ быстрее, чем маскировать два бита за раз от каждого числа и запускать несколько циклов?