3

我正在完成一些 CSE 作业,并且我有一个关于声明更大位大小的整数的快速问题。我的任务是实现一个函数,如果 x 的任何奇数位为 1(假设 x 的大小为 32 位)则返回 1,否则返回 0。

我可以用位值声明一个整数吗:

10101010101010101010101010101010

如果是这样,是否会出现任何问题?如果没有,为什么不呢??我有什么选择?

我的功能:

int any_odd_one(unsigned x)
{
    int mask = 10101010101010101010101010101010
    if(x & mask)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

提前感谢您的任何帮助!

-马特

4

2 回答 2

7

您不能在 C 中使用二进制文字。而是使用十六进制或八进制表示法。

在您的情况下,您将使用unsigned mask = 0xaaaaaaaasince 10101010...is0xaaaaaaaa以十六进制表示(每个1010a以十六进制表示)。

于 2012-10-26T22:38:57.963 回答
3

将其实现为return !!(x&-1u/3*2);.

除了问题中所述的整数宽度外,它还适用于unsigned类型中的任何偶数位。

于 2012-10-26T23:47:29.263 回答