La especificación Java explica la shift operators de la siguiente manera:
Si el tipo promovido del operando de la izquierda es int
, solamente los cinco bits de menor orden del operando de la derecha se utilizan como el cambio distancia. Es como si el operando de la derecha estuviera sujeto a un operador lógico AND bit a bit &
(§15.22.1) con el valor de máscara 0x1f
. Por lo tanto, la distancia de desplazamiento realmente utilizada está siempre en el rango de 0 a 31, inclusive.
El valor de 32 & 0x1f
es cero.
Si el operando de la izquierda es long
, a continuación, se obtiene un poco más por el operando derecho, ampliando el límite superior a 63 en lugar de 31.
Con el fin de tener cualquier valor esperado específica se mueva - 1 a la derecha, debe especificar la representación binaria subyacente de enteros (por ejemplo, el complemento de dos) así como el número de bits (por ejemplo, 32). Cada lenguaje de programación puede definirlos de manera diferente, pero con el interés de simplificar las cosas para la implementación, generalmente especifican que no se permite el cambio por más que la cantidad de bits disponibles. Eso es a menudo porque el hardware de CPU subyacente tampoco lo admite. Después de todo, si desea cambiar esa cantidad de bits, el operando de la izquierda ya no importa, ya que el resultado siempre será el mismo.
Parece Java. No conozco muchos idiomas que definan el operador '>>>'. – leppie
Me encontré con esto cuando estaba tratando de aprender los conceptos básicos de Java, sí, pero no lo etiqueté, así que asumí que el cambio de bit era un concepto bastante genérico. – user183037
check: http://stackoverflow.com/questions/3170412/why-is-132-1 –