2011-04-28 7 views
4

Quelle serait la manière la plus laconique en Java pour vérifier la condition suivanteJava simplifier la syntaxe

int m, n; 

La condition de vérifier est de savoir si m ou n sont négatifs, mais les deux ne doivent pas être négatif. Je cherche une syntaxe laconique mais simple

+1

si (m * n <0) alors ... – euphoria83

+1

@euphoria: Cela ne gèrera pas le débordement. –

+0

Je sais. C'est pour des cas d'utilisation simples, que je déduis de la question de l'utilisateur. – euphoria83

Répondre

15
(m < 0)^(n < 0) 

Notez que dans ce contexte, ^ est l'opérateur XOR logique (oui, je ne veux « logique », distincte de « bit »).

+1

xor est un opérande "largement inconnu" – gd1

+2

C'est principalement parce que les gens ne connaissent pas les bits. Ce qu'ils devraient. – vichle

+0

excellent !!!!!! – Pan

12
(m^n) < 0 

Encore plus de remplissage pour obtenir une réponse de longueur appropriée.

+0

Eh bien, maintenant ma tête me fait mal, mais dans le bon sens – Doug

+2

+1: Ceci est terser que ma réponse, et bien défini en Java (contrairement à C). Cependant, je ne l'utiliserais pas, parce que les intentions sont nettement moins claires –

+0

@Oli Charlesworth - Je ne pense pas que ce soit particulièrement clair, ce qui est vrai pour la plupart des opérations bit à bit .Si ce n'est pas une raison pour un commentaire, je Je ne sais pas ce qui est 8-) – Robin

1

Fondamentalement, votre test devrait être - le bit de signe (ordre le plus élevé) être différent.

Voici le test exprimé en Java;

if ((x & Integer.MIN_VALUE) != (y & Integer.MIN_VALUE)) 
    ... 
2

Je vais pour:

(m < 0) != (n < 0) 

!= exploite les mêmes que pour les ^boolean s, mais je pense qu'il est plus facile à comprendre et plus couramment utilisés.

+0

Ceci est certainement plus clair que la réponse acceptée à l'époque, mais je ne peux pas upvote depuis que quelqu'un a donné cette réponse dans les commentaires sur ma réponse. En outre, je pensais que nous allions pour le lacon ;-) – Robin

+0

@Robin Je vois @EJB le donne sans parenthèses (je ne voudrais pas compter sur ce genre de priorité d'opérateur, bien que Java soit suffisamment typé pour le rendre non ambigu à la humain normal). WordNet définit la justesse comme «un style expressif très court et concis». Je prétends que votre solution n'est pas dans un style expressif. (BTW: J'ai répondu comme CW, donc pas besoin de s'inquiéter que l'upvoting va donner du repu à quelqu'un qui ne le mérite pas.) –

+0

Hawtin - Le dictionnaire en ligne gratuit-> laconique: Bref et au point; effectivement concis 8-) – Robin