Matt Koz
Matt Koz

Reputation: 77

32 Bit Integer Mask

I'm finishing up some CSE homework and I have a quick question about declaring integers of larger bit sizes. My task is to implement a function that returns 1 if any odd bit of x is 1 (assuming size of x is 32 bits) and returns 0 otherwise.

Am I allowed to declare an integer with the bit value:

10101010101010101010101010101010

If so, are there any problems that could arise from this? If not, why not?? What alternatives do I have?

My function:

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

Thanks in advance for any assistance!

-Matt

Upvotes: 3

Views: 5323

Answers (2)

Eric Postpischil
Eric Postpischil

Reputation: 224310

It is more fun to implement this as return !!(x&-1u/3*2);.

In addition to the integer width stated in the problem, it works for any even number of bits in the unsigned type.

Upvotes: 3

nneonneo
nneonneo

Reputation: 179717

You can't use binary literals in C. Instead, use hexadecimal or octal notation.

In your case, you'd use unsigned mask = 0xaaaaaaaa since 10101010... is 0xaaaaaaaa when expressed in hexadecimal (each 1010 is a in hex).

Upvotes: 7

Related Questions