Opérateur de pipe (|) en Java

J’ai cette déclaration en Java:

System.out.println(3|4); 

Pourquoi la sortie 7?

C’est une opération OU bit à bit. Cela modifie les choses au niveau binary.

  011 3 in binary: | 100 in decimal: | 4 ___ ___ 111 7 

Ouvrez Windows calc en mode scientifique. Vous pouvez basculer entre décimal et binary (et hexadécimal) et effectuer des opérations au niveau du bit, y compris ou, et, ou, etc.

Pour faire un bit ou dans votre tête ou sur papier, comparez chaque chiffre du même ordinal. Si l’un des nombres est un 1, le résultat à cet ordinal sera 1.

L’opérateur | fait un “bitwise OR”. La sortie au niveau du bit sur deux bits est égale à 1 si l’un des bits est égal à 1 ou à 0 si les deux bits ont la valeur 0. Au niveau des bits, OU sur deux chiffres effectue un OU sur chaque bit individuellement.

Voici comment fonctionne 3|4 :

  3: 00000011 4: 00000100 -------------- 3|4: 00000111 = 7 

Il effectue une bitwise OR et 3 OR 4 est 7.

Voir ici: http://en.wikipedia.org/wiki/Bitwise_OR#OR

Représentation binary:

  3 = 00000011 4 = 00000100 | is bitwise OR operator 

lorsque vous OU deux nombres, vous prenez la représentation binary et le résultat OR est 1 IFF pour cette colonne au moins une colonne est définie true (1)

Alors

 00000011 00000100 -------- 00000111 

les colonnes vous indiquent alors la valeur à cette position:

 128, 64, 32, 16, 8, 4, 2, 1 

alors

 128, 64, 32, 16, 8, 4, 2, 1 0 , 0, 0, 0, 0, 1, 1, 1 

n’importe quelle colonne avec un 1 signifie que vous ajoutez la valeur de cette colonne:

 4 + 2 + 1 = 7 

| est l’opérateur “bitwise” ou “bitwise”. dans un | b, si le nième bit de a et / ou b vaut 1, le nième bit du résultat sera 1. 3 vaut 11 en binary. 4 est 100 en binary.

 0 1 1 or or or 1 0 0 = = = 1 1 1 

Et 111 se trouve être la représentation binary de 7.

Il est utile de se rendre compte qu’il existe un système généralisé de dénombrement sous-jacent. Le binary est la base 2. Le décimal familier est la base 10. La permission Linux octal est la base 8.

La valeur d’un nombre est obtenue en additionnant les valeurs individuelles de chacun de ses chiffres. Pour tout chiffre, la valeur est dérivée d’une formule simple.

(chiffre) * (base) ^ (nombre de places à gauche du point décimal)

123 = cent vingt trois = (1 * 10 ^ 2) + (2 * 10 ^ 1) + (3 * 10 ^ 0) = 100 + 20 + 3

J’ai appris cela dans CS211 (ne pas se vanter, juste se souvenir)

Comme les opérateurs binarys peuvent être un peu déroutants sans que quelque chose les corrèle, la manière dont j’ai expliqué leur fonction aux non-programmeurs est que vous sous-titrez simplement 1 pour vrai et 0 pour faux, puis ils se comportent de manière identique aux opérateurs la langue anglaise:

la lune est bleue ET le ciel est bleu, c’est faux

0 et 1 est 0

la lune est bleue OU le ciel est bleu, c’est vrai

0 ou 1 est 1

mais l’analogie disparaît quand j’arrive à:

l’océan est bleu XOR les arbres sont verts, c’est faux