Algorithm 关于公共位序列的问题

Algorithm 关于公共位序列的问题,algorithm,Algorithm,假设我们有两个数字,我想写一个程序,在这些数字后面打印公共位 或 答案之一应该是0101 但约束条件是我们应该进行位运算和数学运算 而不是字符串问题(最长的常见后续问题) 谢谢假设您有两个32位整数a和b。将b中的位移位i,并将其环绕(这样右边掉出来的位将从左边进来),然后用a对其进行异或运算。让我从0到31。这将给你32个结果。如果我的推理是正确的,那么公共子序列最长的结果应该是0最多的结果(例如,可以在循环中计算0)。如果不是,这至少应该是一个好的起点。看看-算法 common_ones =

假设我们有两个数字,我想写一个程序,在这些数字后面打印公共位 或

答案之一应该是
0101
但约束条件是我们应该进行位运算和数学运算 而不是字符串问题(最长的常见后续问题)
谢谢

假设您有两个32位整数a和b。将b中的位移位i,并将其环绕(这样右边掉出来的位将从左边进来),然后用a对其进行异或运算。让我从0到31。这将给你32个结果。如果我的推理是正确的,那么公共子序列最长的结果应该是0最多的结果(例如,可以在循环中计算0)。如果不是,这至少应该是一个好的起点。

看看-算法

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
c=c&(c>>1);

c=c|(c)我真的不明白你的问题……你是如何和从哪里得到0101的?请详细说明这个问题,如何给我举几个我不明白的例子well@davit-datuashvili,与其继续问填鸭式的答案,我建议你对你的问题的评论做出一次反应。但我得到的印象是,你对它们免疫:I h我从来没见过你回答任何澄清的请求。或者common_sequence=~(a^b)我认为@user想要求使用位运算查找二进制最长的公共子序列。你的解决方案主要是解决这个问题,但它需要在“c”中查找最长的1序列。
c = c & ( c >> 1 );
c = c | ( c << 1 );

c 0111100000000000001111000111111000111000011000111111100