比方说,我给了一个整数n,它是从用户那里读取的。
我想计算具有的相邻对1的数量。
例如,假设我给了数字31。
31的二进制表示形式是11111。
对的数量应该是11 11 1 => 2对
您将如何使用按位运算符执行此操作?
谢谢!
答案 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);