2010-06-23 2 views
-1

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

1000010111001010100011110001010010101001011101001001001 
0101 01110011011001010111101111111010001001011 

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

+0

Dont действительно понимаю ваш вопрос ... – Phong

+0

как и где от у U 0101? подробнее о вопросе – Anurag

ответ

1
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 

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

+1

альтернативно common_seqence = ~ (a^b) –

+0

Я думаю, что @user хочет попросить найти двоичную длинную общую подпоследовательность, используя побитовые операции. Ваше решение в основном выполняет эту работу, но в «c» нужно найти самую длинную последовательность 1. – pankiii

0

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

+0

, пожалуйста, как мне несколько примеров, я не очень хорошо понял –

+0

@ davit-datuashvili, вместо того чтобы продолжать запрашивать ответы на ложные ответы, я предлагаю вам ответить на комментарии к вашему вопросу на этот раз. Но у меня создается впечатление, что вы невосприимчивы к ним: я никогда не видел, чтобы вы отвечали на любые просьбы о разъяснении. –

Смежные вопросы