operador - java bit operations
¿Cómo funciona Bitwise y(AND) en Java? (6)
Estaba leyendo algunos ejemplos de código y me encontré con un &
en el sitio web de Oracle en su página Bitwise and Bit Shift Operators. En mi opinión, no funcionó muy bien en un trabajo que explicaba el uso de bits a. Entiendo que hace una operación directamente al bit, pero no estoy seguro de qué tipo de operación, y me pregunto cuál es esa operación. Aquí hay un programa de muestra que obtuve del sitio web de Oracle: http://docs.oracle.com/javase/tutorial/displayCode.html?code=http://docs.oracle.com/javase/tutorial/java/nutsandbolts/examples/BitDemo.java
Es un operador Y binario. Realiza una operación Y que es parte de la lógica booleana que se usa comúnmente en números binarios en informática.
Por ejemplo:
0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1
También puede realizar esto en números de varios bits:
01 & 00 = 00
11 & 00 = 00
11 & 01 = 01
1111 & 0101 = 0101
11111111 & 01101101 = 01101101
...
Es una operación lógica en los valores de entrada. Para comprender convertir los valores a la forma binaria y donde bot bits en la posición n tienen un 1, el resultado tiene un 1. Al final convertir de nuevo.
Por ejemplo con esos valores de ejemplo:
0x2222 = 10001000100010
0x000F = 00000000001111
result = 00000000000010 => 0x0002 or just 2
Si expandes las dos variables de acuerdo con su código hexadecimal, estos son:
bitmask : 0000 0000 0000 1111
val: 0010 0010 0010 0010
Ahora, una operación AND a nivel de bits simple da como resultado el número 0000 0000 0000 0010
, que en unidades decimales es 2. Sin embargo, asumo que usted conoce las operaciones booleanas fundamentales y los sistemas numéricos.
Si observa dos números representados en binario, un bit a bit &
crea un tercer número que tiene un 1 en cada lugar, ambos números tienen un 1. (En cualquier otro lugar hay ceros).
Ejemplo :
0b10011011 &
0b10100010 =
0b10000010
Tenga en cuenta que solo aparecen en un lugar cuando ambos argumentos tienen uno en ese lugar.
Los bits y los bits son útiles cuando cada bit de un número almacena una información específica.
También puede usarlos para eliminar / extraer ciertas secciones de números mediante el uso de máscaras.
Un entero se representa como una secuencia de bits en la memoria. Para la interacción con humanos, la computadora tiene que mostrarlo como dígitos decimales, pero todos los cálculos se llevan a cabo como binarios. 123
en decimal se almacena como 1111011
en la memoria.
El operador &
es un "Y" bit a bit. El resultado son los bits que están activados en ambos números. 1001 & 1100 = 1000
, ya que solo el primer bit está activado en ambos.
El |
el operador es un bit a "O". El resultado son los bits que se activan en cualquiera de los números. 1001 | 1100 = 1101
1001 | 1100 = 1101
, ya que solo el segundo bit de la derecha es cero en ambos.
También están los operadores ^
y ~
, que son bit a bit "Xor" y bit a bit "Not", respectivamente. Finalmente están los operadores de cambio <<
, >>
y >>>
.
Debajo del capó, 123
se almacena como 01111011 00000000 00000000 00000000
o 00000000 00000000 00000000 01111011
dependiendo del sistema. El uso de los operadores bit a bit, cuya representación se utiliza, no importa, ya que ambas representaciones se tratan como el número lógico 00000000000000000000000001111011
. 1111011
ceros a la izquierda deja 1111011
.
import.java.io.*;
import.java.util.*;
public class Test {
public static void main(String[] args) {
int rmv,rmv1;
//this R.M.VIVEK complete bitwise program for java
Scanner vivek=new Scanner();
System.out.println("ENTER THE X value");
rmv = vivek.nextInt();
System.out.println("ENTER THE y value");
rmv1 = vivek.nextInt();
System.out.println("AND table based/t(&)rmv=%d,vivek=%d=%d/n",rmv,rmv1,rmv&rmv1);//11=1,10=0
System.out.println("OR table based/t(&)rmv=%d,vivek=%d=%d/n",rmv,rmv1,rmv|rmv1);//10=1,00=0
System.out.println("xOR table based/t(&)rmv=%d,vivek=%d=%d/n",rmv,rmv1,rmv^rmv1);
System.out.println("LEFT SWITH based to %d>>4=%d/n",rmv<<4);
System.out.println("RIGTH SWITH based to %d>>2=%d/n",rmv>>2);
for(int v=1;v<=10;v++)
System.out.println("LIFT SWITH based to (-NAGATIVE VALUE) -1<<%d=%p/n",i,-1<<1+i);
}
}