Operatore di pipe (|) in Java

Ho questa affermazione in Java:

System.out.println(3|4); 

Perché l’output 7?

È un’operazione OR bit a bit. Modifica le cose a livello binario.

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

Apri Windows calc usando la modalità scientifica. È ansible passare da decimale a binario (esadecimale) ed eseguire operazioni bit a bit inclusi o, e, xor, ecc.

Per fare un bit a bit o in testa o sulla carta, confronta ogni cifra dello stesso ordinale. Se uno dei numeri è un 1, il risultato di quell’ordinale sarà 1.

L’operatore | fa un “OR bit a bit”. L’output di OR bit a bit su due bit è 1 se il bit è 1 o 0 se entrambi i bit sono 0. Bitwise OR su due numeri esegue solo un OR bit a bit su ciascun bit singolarmente.

Ecco come funziona 3|4 :

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

Sta eseguendo un’operazione bitwise OR a bitwise OR e 3 OR 4 è 7.

Vedi qui: http://en.wikipedia.org/wiki/Bitwise_OR#OR

Rappresentazione binaria:

  3 = 00000011 4 = 00000100 | is bitwise OR operator 

quando si OPPURE due numeri, si assume la rappresentazione binaria e il risultato OR è 1 IFF per quella colonna almeno una colonna è impostata su true (1)

Così

 00000011 00000100 -------- 00000111 

quindi, le colonne ti dicono il valore in quella posizione:

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

così

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

qualsiasi colonna con un 1 significa che aggiungi il valore di quella colonna:

 4 + 2 + 1 = 7 

| è l’operatore “bit a bit” o “bitwise”. in a | b, se l’ennesimo bit di a e / o b è 1, l’ennesimo bit del risultato sarà 1. 3 è 11 in binario. 4 è 100 in binario.

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

E 111 sembra essere la rappresentazione binaria di 7.

È utile rendersi conto che esiste un sistema generalizzato per il conteggio alla base di questo. Il binario è base-2. Il decimale familiare è base 10. L’authorization di Linux ottale è la base 8.

Il valore di un numero si ottiene sumndo i singoli valori di ciascuna delle sue cifre. Per qualsiasi cifra, il valore è derivato da una semplice formula.

(cifra) * (base) ^ (numero di posti a sinistra del punto decimale)

123 = centoventitre = (1 * 10 ^ 2) + (2 * 10 ^ 1) + (3 * 10 ^ 0) = 100 + 20 + 3

L’ho imparato in CS211 (non vantandomi, solo ricordandomi)

Poiché gli operatori bit a bit possono essere un po ‘confusi senza qualcosa a cui correlarli, il modo in cui ho spiegato la loro funzione ai non programmatori è che si sottotitoli semplicemente 1 per vero e 0 per falso, e quindi si comportano in modo identico agli operatori in la lingua inglese:

la luna è blu E il cielo è blu, è falso

0 e 1 è 0

la luna è blu O il cielo è blu, è vero

0 o 1 è 1

ma l’analogia si rompe quando arrivo:

l’oceano è blu XOR gli alberi sono verdi, è falso