operardor >> en java

Iniciado por + 1 Oculto(s), 11 Julio 2016, 03:11 AM

0 Miembros y 1 Visitante están viendo este tema.

+ 1 Oculto(s)

que clase de operador es este, desde cuando se implemento tal comando.

Código (java) [Seleccionar]

cuando uso n>>2 es igual n/2




AlbertoBSD

#1
Son operadores a nivel de bit

Ese es desplazamiento a la derecha

Tambien esta << que es desplazamiento a la Izquierda.

Vienen desde el lenguaje C, del cual java es primo en la mayoria de sintaxis y operadores

Por ejemplo si tienes un numero entero  255 en binario es

00000000000000000000000011111111

Si le aplicas

numero = numero>>1;

Quedaria

00000000000000000000000001111111

El cual es 128

Todos los bits recorren una posicion a la derecha lo cual es una division entre 2

Si quieres que todos los bits se recorran 4 posiciones solo haces

numero = numero>>4;

Pero segun tu >>2 es la división entre 2, lo cual no es correcto.

Mas info
https://es.wikipedia.org/wiki/Operador_a_nivel_de_bits

Saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

+ 1 Oculto(s)

gracias y estas en lo cierto, leere algo sobre esto se ve interesante, y me equivoke en el ejemplo, gracias

Octsam


En Java hay 3 operadores de desplazamiento de bits:

   1) El operador <<, que desplaza todos los bits hacia la izquierda tantas posiciones como sea indicado, dejando a la derecha valores nulos. Los bits no nulos que no quepan serán perdidos, y si hay una conservación del signo, equivale a multiplicar por 2 elevado al número de bits desplazados. Es decir:

int n = 1 << 5

Equivale a hacer:

int n = 1*32

Porque 2^5 = 32. Pero:

int n = 1 << 31

Equivale a poner:

int n = Integer.MIN_VALUE

Número que es -2147483648, porque al ser 1 el bit de la posición 31 el número es negativo, y si todos los demás son nulos, es el entero menor de todos.
Las razones de éso no las daré aquí, sino que es suficiente con saber que si como consecuencia del desplazamiento, cambia el bit de la posición 31, siendo el primero el bit de la posición 0, el número cambiará de signo.

   2) El operador >>>, que desplaza todos los bits hacia la derecha tantas posiciones como sea indicado, dejando a la izquierda valores nulos. Los bits no nulos que no quepan serán perdidos, y si hay una conservación del signo, equivale a dividir por 2 elevado al número de bits desplazados. Si el número era negativo, este desplazamiento lo hará positivo, porque el bit de la posición 31 pasará de ser 1 a ser 0.

   3) El operador >>, que desplaza todos los bits menos el del signo hacia la derecha tantas posiciones como sea indicado, por lo que el número conservará su signo, algo que ninguno de los otros dos garantiza, por lo que siempre equivale a dividir por 2 elevado al número de bits desplazados.

El operador >> de C y C++, cumple la función que en Java cumple el operador >>>.


hectornunezrivas

Hola.
OPERADORES JAVA A NIVEL DE BITS

Realizan la manipulación de los bits de los datos con los que operan.

Los datos deben ser de tipo entero.

Los operadores a nivel de bits en java son:
&       and a nivel de bits
|        or a nivel de bits
^       xor a nivel de bits
<<     desplazamiento a la izquierda, rellenando con ceros a la derecha
>>   desplazamiento a la derecha, rellenando con el bit de signo por la izquierda
>>>    desplazamiento a la derecha rellenando con ceros por la izquierda

Saludos

+ 1 Oculto(s)


AlbertoBSD

#6
el and se puede usar para enmascarar banderas, generalmente se usarian solo en entornos con muy poca memoria o recursos limitados.

Yo implemente mi propia version dw biginteger en C y abuse mucho del and y de las operaciones de recorrimiento de bits para hacer mas eficiente alguns operaciones.

Te voy a dejar aqui los links donde puse algunos ejemplos en C, pero igual aplicarían en java

Re: Optimizar tamaño de estructura de Datos

Números de longitud variable en C (Numeros muy grandes)
En este busca en la funcion add_numero


Saludos
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW