32位整数掩码

时间:2012-10-26 22:36:31

标签: c binary bit-manipulation mask bitwise-operators

我正在完成一些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;
    }
}

提前感谢您的任何帮助!

-Matt

2 个答案:

答案 0 :(得分:7)

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

在您的情况下,您使用unsigned mask = 0xaaaaaaaa,因为10101010...0xaaaaaaaa时以十六进制表示(每个1010a十六进制)。< / p>

答案 1 :(得分:3)

将其作为return !!(x&-1u/3*2);实现更为有趣。

除问题中陈述的整数宽度外,它适用于unsigned类型中任意偶数位。