androïde - Java: Que signifie ~



android mise a jour (4)

C'est l'opérateur de complément Unary ~ Bitwise (quoting) :

  • seulement utilisé avec des valeurs entières
  • inverse les bits, c'est-à-dire qu'un bit 0 devient 1 bit et vice versa
  • dans tous les cas ~ x est égal à (-x) -1

Voir aussi cette page sur les opérateurs Bitwise sur wikipedia , qui stipule:

Le NOT, ou complément bitwise, est une opération unaire qui effectue une négation logique sur chaque bit, formant le complément de la valeur binaire donnée. Les chiffres qui étaient 0 deviennent 1, et vice versa.
Par exemple:

NOT 0111  (decimal 7)
  = 1000  (decimal 8)

Dans de nombreux langages de programmation (y compris ceux de la famille C) , l'opérateur NOTwise est " ~ " (tilde).

Dans ce code source Java j'ai cette ligne:

if ((modifiers & ~KeyEvent.SHIFT_MASK) != 0) ....

Que signifie le tilde?


Comme dit précédemment ~ est l'opérateur unaire bitwise unaire.
Votre exemple teste si les modifiers contiennent des bits autres que ceux définis dans KeyEvent.SHIFT_MASK .

  • ~KeyEvent.SHIFT_MASK -> tous les bits sauf ceux de KeyEvent.SHIFT_MASK ont la valeur 1.
  • (modifiers & ~KeyEvent.SHIFT_MASK) -> tous les 1 bits dans les modifiers qui "n'appartiennent pas" à KeyEvent.SHIFT_MASK
  • if ((modifiers & ~KeyEvent.SHIFT_MASK) != 0) -> s'il y avait au moins un autre bit à 1 en plus de KeyEvent.SHIFT_MASK faire quelque chose ...

Depuis le site Web de Java http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html

L'opérateur de complément de bits unaire "~" inverse un motif de bits; il peut être appliqué à l'un des types intégraux, faisant de chaque "0" un "1" et chaque "1" un "0". Par exemple, un octet contient 8 bits; l'application de cet opérateur à une valeur dont le modèle de bits est "00000000" changerait son modèle en "11111111".

Maintenant, comme précédemment répondu par Pascal MARTIN, à tout cas donné, la valeur est égale à - (x) -1. Par exemple ~ 2 = -3, ~ -6 = 5, etc.

De plus, en Java, tous les entiers positifs sont stockés en tant que leurs représentations binaires et les entiers négatifs sont stockés dans la valeur de compliment de 2 d'un nombre entier positif.

Maintenant, voyons comment cela fonctionne au niveau du bit dans le cas de ~ 2 = -3:

Initialement, 2 est stocké dans sa représentation binaire:

0000 0000 0000 0010

Maintenant ~ 2 se traduira par la valeur (inverse les bits):

1111 1111 1111 1101

Comment dans le monde je sais que c'est -3? Eh bien, c'est -3 parce qu'il est dérivé de la représentation de 2 compliments de 3.

Comme nous le savons 2 (x) = 1 (x) + 1 ( https://delightlylinux.wordpress.com/2014/10/13/binary-lesson-12-ones-complement-and-twos-complement/ )
Notre but est de trouver x :
1 (x) = 2 (x) - 1 (basé sur l'expression précédente)

Comme notre réponse est dans le compliment de 2,
1 (x) = 1111 1111 1111 1101 - 0000 0000 0000 0001
1 (x) = 1111 1111 1111 1100 (Comment soustraire - http://sandbox.mc.edu/~bennet/cs110/pm/sub.html )

Par conséquent x = 1 compliment de valeur (comme la réponse que nous avons obtenue représente le compliment de 1 de x).
x = 0000 0000 0000 0011
Donc, nous avons trouvé que x est 3 et par conséquent notre résultat précédent de ~ l'opérateur 1111 1111 1111 1101 est -3 écrit comme 2 compliment de 3.






special-characters