我有一种检查天气数字是偶数还是奇数的方法:
-(BOOL)numberIsEven:(unsigned int *)x {
if (x & 1)
{
return TRUE;
}
else
{
return FALSE;
}
}
然而,每当我编译它时,我都会收到错误:
Invalid operands to binary %
因此,它正在将程序集编译为模数函数并且失败,但是如果我使用基于模数的函数(可以说更慢),我会得到相同的错误!
帮我堆叠溢出
谢谢 - 奥利
答案 0 :(得分:4)
x
是一个指针。模运算符不适用于指针。
return (*x & 1);
取消引用指针,然后返回模数的结果(隐含地转换为BOOL)
答案 1 :(得分:1)
我怀疑你错误地阅读了错误消息,它确实说“二进制和无效操作数”。
它说是“x”的原因是指针,所以你需要说:
if (*x & 1)
不
if (x & 1)
答案 2 :(得分:0)
那是因为(除了你的代码包含很多拼写错误这一事实)x被定义为指针。指针不能对其执行模数,其结果毫无意义。
答案 3 :(得分:0)
return *x & 1;
由于x
是指向int的指针,因此您需要首先遵循它。
或者,您可以更改签名以获取unsigned int
。在这种情况下,我认为传递指针没有任何好处。
答案 4 :(得分:0)
bool isOdd(unsigned int x) {
return (bool)(x&1);
}
bool isOdd_by_ptr(unsigned int * p) {
return isOdd( *p );
}
除非这实际上是C,否则你不会通过强制转换为bool获得任何东西。
#define IS_ODD( X ) (1 & (X) )
#define IS_ODD_BY_PTR( P ) (1 & *(P) )
工作得很好。