вопрос об общих битовых последовательностях - PullRequest
0 голосов
/ 23 июня 2010

предположим, у нас есть два числа, я хочу написать программу, которая печатает общие биты, которые следуют в этих числах или

 1000010111001010100011110001010010101001011101001001001
0101 01110011011001010111101111111010001001011

один из ответов должен быть 0101 но ограничение в том, что мы должны делать побитовые операции и математические операции а не строковые проблемы (самые длинные общие последующие) спасибо

Ответы [ 3 ]

1 голос
/ 23 июня 2010
common_ones = a & b;
common_zeros = ~a & ~b;
common_sequences = common_ones | common_zeros;

например:

a 1000010111001010100011110001010010101001011101001001001
b 0000000000010101110011011001010111101111111010001001011
c 0111101000100000101111010111111010111001011000111111101

, чтобы очистить однобитовые последовательности, вы можете использовать это:

c = c & ( c >> 1 );
c = c | ( c << 1 );

c 0111100000000000001111000111111000111000011000111111100

Не ясно, хотите ли вы, ноэто быстрый и простой способ найти все общие битовые последовательности в одной позиции в двух значениях.Если вы ищете общие битовые последовательности в любой позиции, вам нужно повернуть одно значение в каждую битовую позицию и выполнить вышеуказанные тесты.

0 голосов
/ 23 июня 2010

Взгляните на Sequitur -Алгоритм.

0 голосов
/ 23 июня 2010

Предположим, у вас есть два 32-битных целых числа a и b.Сдвиньте биты в b на i и оберните их (чтобы выпавший справа бит попал в левую часть) и зафиксируйте его с помощью a.Позвольте мне перейти от 0 до 31. Это даст вам 32 результата.Если мои рассуждения верны, результатом с самой длинной общей подпоследовательностью должен быть результат с наибольшим 0 (например, подсчет 0 можно выполнить в цикле).Если нет, то это должно быть хорошей отправной точкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...