计算二进制中相邻对的数量

时间:2019-10-20 05:57:50

标签: c binary bit-manipulation bit

比方说,我给了一个整数n,它是从用户那里读取的。

我想计算具有的相邻对1的数量。

例如,假设我给了数字31。

31的二进制表示形式是11111。

对的数量应该是11 11 1 => 2对

您将如何使用按位运算符执行此操作?

谢谢!

1 个答案:

答案 0 :(得分:0)

您必须使用((n&3)==3)条件对整数进行验证,才能在位0和1中找到相邻的对。如果找到对,则向右移2,否则向右移1,直到我们没有检查所有32个位。

   unsigned int n = 31;  /* input */
   unsigned char number_of_pairs = 0;  /* result */
   unsigned char mask_position = 0;
   do
   {
      if(((n >> mask_position) & 3) == 3)
      {
         number_of_pairs += 1;
         mask_position += 2;
      }
      else
      { 
         mask_position += 1;
      }
   } while(mask_position < 32);