web-dev-qa-db-fra.com

Comment fonctionne Bitwise & (AND) en Java?

Je lisais quelques exemples de code et suis tombé sur un & sur le site Web d'Oracle sur leur page Opérateurs Bitwise et Bit Shift. À mon avis, il n'a pas fait trop bien un travail expliquant le bitwise &. Je comprends qu'il effectue une opération directement sur le bit, mais je ne sais tout simplement pas quel type d'opération, et je me demande ce qu'est cette opération. Voici un exemple de programme que j'ai retiré du site Web d'Oracle: http://docs.Oracle.com/javase/tutorial/displayCode.html?code=http://docs.Oracle.com/javase/tutorial/ Java/nutsandbolts/examples/BitDemo.Java

40
Anzwur

Un entier est représenté comme une séquence de bits en mémoire. Pour l'interaction avec les humains, l'ordinateur doit l'afficher sous forme de chiffres décimaux, mais tous les calculs sont effectués sous forme binaire. 123 en décimal est stocké sous la forme 1111011 en mémoire.

Le & L'opérateur est un "Et" au niveau du bit. Le résultat est les bits qui sont activés dans les deux nombres. 1001 & 1100 = 1000, car seul le premier bit est activé dans les deux.

Le | L'opérateur est un "Ou" au niveau du bit. Le résultat est les bits qui sont activés dans l'un ou l'autre des nombres. 1001 | 1100 = 1101, car seul le deuxième bit de droite est nul dans les deux.

Il y a aussi les ^ et ~ opérateurs, qui sont respectivement "Xor" au niveau du bit et "Non" au niveau du bit. Enfin, il y a les <<, >> et >>> opérateurs de décalage.


Sous la capuche, 123 est stocké sous la forme 01111011 00000000 00000000 00000000 ou 00000000 00000000 00000000 01111011 selon le système. L'utilisation des opérateurs au niveau du bit, quelle représentation est utilisée, n'a pas d'importance, car les deux représentations sont traitées comme le nombre logique 00000000000000000000000001111011. Dépouillant les zéros de tête des feuilles 1111011.

62
Markus Jarderot

C'est un opérateur binaire ET. Il effectue une opération ET qui fait partie de logique booléenne qui est couramment utilisée sur les nombres binaires dans le calcul.

Par exemple:

0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1

Vous pouvez également effectuer cette opération sur des nombres à plusieurs bits:

01 & 00 = 00
11 & 00 = 00
11 & 01 = 01
1111 & 0101 = 0101
11111111 & 01101101 = 01101101
...
9
Alex W

Si vous regardez deux nombres représentés en binaire, un bit & crée un troisième nombre qui a un 1 à chaque endroit où les deux nombres ont un 1. (Partout ailleurs, il y a des zéros).


Exemple:
0b10011011 &
0b10100010 =
0b10000010


Notez que ceux-ci n'apparaissent qu'à un endroit lorsque les deux arguments en ont un à cet endroit.
Les bits et les sont utiles lorsque chaque bit d'un nombre stocke une information spécifique.
Vous pouvez également les utiliser pour supprimer/extraire certaines sections de nombres à l'aide de masques.

4
user2134086

Si vous développez les deux variables en fonction de leur code hexadécimal, ce sont:

bitmask : 0000 0000 0000 1111
val:      0010 0010 0010 0010

Maintenant, une simple opération ET au niveau du bit donne le nombre 0000 0000 0000 0010, qui est en unités décimales égal à 2. Je suppose cependant que vous connaissez les opérations booléennes fondamentales et les systèmes numériques.

3
dotslash

C'est une opération logique sur les valeurs d'entrée. Pour comprendre, convertissez les valeurs sous la forme binaire et où les bits de bot en position n ont un 1, le résultat a un 1. À la fin, reconvertissez.

Par exemple, avec ces exemples de valeurs:

0x2222 =  10001000100010
0x000F =  00000000001111
result =  00000000000010   => 0x0002 or just 2
1
clearwater

Il ne suffit pas de savoir comment Bitwise AND fonctionne. Une partie importante de l'apprentissage est de savoir comment appliquer ce que nous avons appris. Voici un cas d'utilisation pour appliquer AND au niveau du bit. Exemple:

L'ajout d'un nombre pair en binaire avec le binaire de 1 entraînera des zéros. Parce que tout le nombre pair a son dernier bit (lecture de gauche à droite) 0 et le seul bit 1 a 1 à la fin.

Si vous deviez demander d'écrire une fonction qui prend un argument comme un nombre et renvoie vrai pour le nombre pair sans utiliser d'addition, de multiplication, de division, de soustraction, de modulo et vous ne pouvez pas convertir le nombre en chaîne.

Cette fonction est un cas d'utilisation parfait pour utiliser AND au niveau du bit. Comme je l'ai expliqué plus tôt. Vous me demandez le code? Voici le code Java.

/**
 * <p> Helper function </p>
 * @param number
 * @return 0 for even otherwise 1
 */

private int isEven(int number){
    return (number & 1);
}
0
supritshah1289