32位整数掩码
我正在完成一些CSE作业,我有一个关于声明更大比特大小的整数的快速问题。 我的任务是实现一个函数,如果x的任何奇数位为1(假设x的大小为32位),则返回1,否则返回0。
我允许声明一个具有位值的整数:
10101010101010101010101010101010
如果是这样,那么可能会出现任何问题吗? 如果没有,为什么不呢? 我有什么替代品?
我的function:
int any_odd_one(unsigned x) { int mask = 10101010101010101010101010101010 if(x & mask) { return 1; } else { return 0; } }
在此先感谢您的任何帮助!
-Matt
您不能在C中使用二进制文字。而是使用hex或八进制表示法。
在你的情况下,你使用unsigned mask = 0xaaaaaaaa
因为10101010...
当用hex表示时是0xaaaaaaaa
(每个1010
是hex)。
实现它作为return !!(x&-1u/3*2);
更有趣return !!(x&-1u/3*2);
。
除了问题中陈述的整数宽度外,它还适用于unsigned
类型中的任何偶数位。