Oracle
 sql >> Database >  >> RDS >> Oracle

funzione di bit e oracolo

In binario, "set" significa "ha il valore 1". "Non impostato" significa "ha il valore 0".

Dai documenti Oracle per BITAND:

"Il risultato viene calcolato in più passaggi. Innanzitutto, ogni argomento A viene sostituito con il valore SIGN(A)*FLOOR(ABS(A)). Questa conversione ha l'effetto di troncare ogni argomento verso zero. Successivamente, ogni argomento A (che deve now be an integer value) viene convertito in un valore intero binario in complemento a due di n bit. I valori di due bit vengono combinati utilizzando un'operazione AND bit per bit. Infine, il valore di complemento a due di n bit risultante viene riconvertito in NUMBER."

In parole povere, questa funzione tronca i suoi argomenti, li converte in un numero binario (attualmente limitato a 128 bit), AND unisce i due numeri binari e restituisce il risultato della conversione del numero binario in un NUMERO.

Ecco il risultato di tutte le possibili combinazioni di zero e uno:

SELECT BITAND(0, 0) AS "0, 0",  -- i.e. 0 AND 0 = 0
       BITAND(0, 1) AS "0, 1",  -- i.e. 0 AND 1 = 0
       BITAND(1, 0) AS "1, 0",  -- i.e. 1 AND 0 = 0
       BITAND(1, 1) AS "1, 1"   -- i.e. 1 AND 1 = 1
  FROM DUAL;

Un esempio più complesso sarebbe ANDing insieme 11 e 5. In binario, 11 decimale diventa "1011". 5 decimale diventa "0101" binario. Se tu E questi valori insieme, come in

1 0 1 1
0 1 0 1
-------
0 0 0 1

ottieni 1 binario, che è ancora 1 quando riconvertito in decimale.

Condividi e divertiti.