我想检查数字是否将所有偶数位或奇数位设置为1并且只有它们。对于例如:检查数字中的偶数或奇数位'
数42
是正确的,因为在二进制代码101010
它拥有一切,只有偶数位集来1
。 号码21
也是正确的,。
数字69
例如。 1000101
是不正确的,因为只有三个奇数位集合到1
。
我试过使用不同的操作与^, &, >>, <<
,我仍然不知道如何使用这些操作符来做到这一点。是的,我需要在C
中使用逻辑运算符来执行此操作。
我想检查数字是否将所有偶数位或奇数位设置为1并且只有它们。对于例如:检查数字中的偶数或奇数位'
数42
是正确的,因为在二进制代码101010
它拥有一切,只有偶数位集来1
。 号码21
也是正确的,。
数字69
例如。 1000101
是不正确的,因为只有三个奇数位集合到1
。
我试过使用不同的操作与^, &, >>, <<
,我仍然不知道如何使用这些操作符来做到这一点。是的,我需要在C
中使用逻辑运算符来执行此操作。
这些数字有一个属性,(x^(x >> 1)) + 1
是2和y
功率为2,如果y & (y - 1) == 0
这样一个测试可能是((x^(x >> 1)) + 1) & (x^(x >> 1)) == 0
这会为任何规模的数字工作的动力。
是的,就是这样!谢谢。 –
这很好,但是将'(x ^(x >> 1))'存储在一个单独的变量y中会更好,因为程序不需要重新计算该表达式的值了 –
bool isEven(int n){
bool isEven = true;
while(n){
if(n & 1){
isEven = !isEven;
}
n = n >> 1;
}
return isEven;
}
只要n是!= 0,那么(n)将继续,但它仍然存在。 如果第一位是1,那么我们将偶数参数更改为相反(甚至变为奇数,反之亦然),在每次迭代中,我们将数字向右移动一位。
发布代码没有帮助,请在1或2行解释。 – zengr
这并不回答被问到的问题。这将检查该数字是否设置了偶数或奇数位。问题是要检查所有奇数编号的位是否已设置,或者是否设置了所有已编号的位。 – Lindydancer
opps将解决它,谢谢。 – roni
#include <stdio.h>
int main(void)
{
unsigned uu;
for (uu=0; uu < 43; uu++) {
int res;
res = (((uu & 0xAAAAAAAA) == uu) || ((uu & 0x55555555) == uu));
printf("%u: %d\n", uu, res);
}
return 0;
}
如果人们开始评论(或更正)空白,非空白必须是正确的;-) – wildplasser
0可能被认为是一个特例,因为它根本没有位。 (但至少它没有*错误的*位设置;-)根据要求,你当然可以单独排除零。 – wildplasser
要判断一个数字是奇数还是偶数,只需要检查* last *位。 – meagar
你这样做的目的是什么? –
[相关](http://stackoverflow.com/questions/109023/best-algorithm-to-count-the-number-of-set-bits-in-a-32-bit-integer) –