2010-07-28 149 views
-2

我要檢查度過了許多的方法是偶數或奇數:無效操作數爲二進制

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


    if (x & 1) 
{ 
    return TRUE; 
} 
else 
{ 
return FALSE; 
    } 
} 

但是每當我編譯它,我得到的錯誤:

Invalid operands to binary % 

所以它編譯成彙編作爲模量函數並失敗,但不知何故,如果我使用基於模量的函數(可以說比較慢),我會得到相同的錯誤!

幫我堆棧溢出

謝謝 - 奧利

+8

'if(isTrue){return true; } else {return false; '範例。好傢伙。 – NullUserException 2010-07-28 17:27:59

+0

除了所有其他問題,當您修復不取消引用指針的錯誤時,您的方法名稱非常垃圾,因爲如果* x是奇數,它將返回true。 – JeremyP 2010-07-28 17:49:23

+0

你能發佈真實的代碼和錯誤信息嗎?你發佈的內容顯然是錯誤的。 – 2010-07-28 18:14:40

回答

0

這是因爲(除了你的代碼包含了大量錯別字的事實)x被定義爲一個指針。指針不能在其上執行模數,結果是沒有意義的。

1

我懷疑你讀錯誤信息錯了,它確實說「無效的操作數到二進制&」。

它說,這是 「X」 的原因是一個指針,所以你需要說:

if (*x & 1) 

if (x & 1) 
4

x是一個指針。模運算符不能用於指針。

return (*x & 1); 

這解引用指針,然後返回模(implictly轉換爲BOOL)

0
return *x & 1; 

由於x是一個指針爲int的結果,你需要先尊重它。

或者,您可以更改簽名以採取unsigned int。在這種情況下,我看不到傳遞指針的好處。

0
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)) 

工作得很好。

+0

這裏有一些有趣的嘗試:'bool isOdd(int x){return!isEven(x); }','bool isEven(int x){return!isodd(x);} }'= D – NullUserException 2010-07-28 23:39:57

相關問題