Objective c 二进制操作数无效

Objective c 二进制操作数无效,objective-c,gcc,assembly,compiler-construction,Objective C,Gcc,Assembly,Compiler Construction,我有一种检查数字是偶数还是奇数的方法: -(BOOL)numberIsEven:(unsigned int *)x { if (x & 1) { return TRUE; } else { return FALSE; } } 但是,每当我编译它时,就会出现以下错误: Invalid operands to binary % 因此,它作为模函数编译到汇编中,并以某种方式失败,但是,如果我使用基于模的函数(可以说较慢),我会得到相同的错误 帮我堆叠溢出 谢谢

我有一种检查数字是偶数还是奇数的方法:

   -(BOOL)numberIsEven:(unsigned int *)x {


  if (x & 1)
 {
  return TRUE;
 }
 else
{
 return FALSE;
  }
}
但是,每当我编译它时,就会出现以下错误:

Invalid operands to binary %
因此,它作为模函数编译到汇编中,并以某种方式失败,但是,如果我使用基于模的函数(可以说较慢),我会得到相同的错误

帮我堆叠溢出

谢谢-
奥利

这是因为(除了代码中包含大量打字错误之外)x被定义为指针。指针不能对其执行模运算,其结果毫无意义。

我怀疑您读取的错误消息是错误的,它实际上表示“二进制操作数无效&”

它之所以说是“x”是指针,所以你需要说:

if (*x & 1)
不是


x
是一个指针。模运算符在指针上不起作用

return (*x & 1);
这将取消对指针的引用,然后返回模的结果(隐式转换为布尔值)

由于
x
是指向int的指针,因此需要首先遵从它

或者,您可以将签名更改为采用
无符号int
。我不认为在这种情况下传球有什么好处

bool isOdd(unsigned int x) {
    return (bool)(x&1);
}

bool isOdd_by_ptr(unsigned int * p) {
    return isOdd( *p );
}
除了这实际上是C,所以你不能通过向布尔施放任何东西

#define IS_ODD( X ) (1 & (X) )

#define IS_ODD_BY_PTR( P ) (1 & *(P) )

工作正常。

if(isTrue){return true;}else{return false;}
范例。哦,孩子。除了所有其他问题,当你修复了不去引用指针的错误时,你的方法名真的是垃圾,因为如果*x是奇数,它将返回true。你能发布真实的代码和错误消息吗?您发布的内容显然是错误的。这里有一些有趣的尝试:
bool-isOdd(intx){return!isEven(x);}
bool-isEven(intx){return!isOdd(x);}
=D
bool isOdd(unsigned int x) {
    return (bool)(x&1);
}

bool isOdd_by_ptr(unsigned int * p) {
    return isOdd( *p );
}
#define IS_ODD( X ) (1 & (X) )

#define IS_ODD_BY_PTR( P ) (1 & *(P) )