2011-04-04 36 views
1

我要比較4個變量a,b,c,d如果它們中的任何一個是-1返回false。 以及這可能是如何簡潔? 可能會做一些數學運算!我不喜歡爲這件簡單的事情浪費太多的角色或線條。用於比較4個號碼的簡明代碼

+3

你要簡化'一== - 1 && b == - 1個&&ç== - 1 && d == - 1' ? – kennytm 2011-04-04 19:14:31

+0

將4個變量'a,b,c,d'與什麼相比較? – Sadique 2011-04-04 19:16:08

+0

erxtreamly對不起,在問題中有一個錯字。我的意思是他們中的任何一個**是** -1返回false – 2011-04-04 19:17:07

回答

10

通常情況下:

return a!=-1 && b!=-1 && c!=-1 && d!=-1; 

由於~(-1) == 0 2的補機,並0是假值,我們可以在上面降低

return ~a && ~b && ~c && ~d; 

,或者不依靠2的補:

return a+1 && b+1 && c+1 && d+1; 

但它在溢出時有未定義的行爲。

(。但請用正常的方式,您可能忘記了這個聰明的黑客在後面做年)

+0

+1,但請注意與和的溢出! :) – pmg 2011-04-04 19:26:54

+0

不應該是'return((〜a&〜b&〜c&〜d)<0);'? :) – 2011-04-04 19:27:08

+0

@NeelBasu:沒有。 – kennytm 2011-04-04 19:28:12

1

如果你的號碼可以是是非負或-1,那麼你可以使用以下命令:

return~(a|b|c|d); 

(除去白色空間,所以它看起來更簡潔)