假设我得到了一个整数n,它是从用户那里读取的。
我想数一数 1 的相邻对数。
例如,假设我得到数字 31。
31 的二进制表示形式是 11111。
对数为 11 11 1 => 2 对
如何使用按位运算符执行此操作?
谢谢!
您必须使用((n&3)==3)
条件验证整数,才能找到位位置 0 和 1 中的相邻对。如果找到 pair,我们向右移动 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);