traduccion etf bitwise javascript numbers operators bitwise-operators

javascript - etf - Operador de bit a bit x>> 1 yx>> 0



bitwise operators python (7)

Posibles duplicados:
¿Qué hacen estos operadores?
>> en javascript

¿Alguien puede explicar el operador bit a bit >> 1 ?

ejemplo:

65 >> 1 = 32

y también cuando >> 0

¿Qué logra en este ejemplo?

var size = (Math.random() * 100 >> 0) + 20;


El operador ''>>'' desplaza el contenido de una variable en 1 bit. Esto resulta, efectivamente, en la división entera de ese valor por 2 como se muestra en su ejemplo:

65 >> 1 = 32

Digamos que una variable siempre tiene 32 bits de largo. El ejemplo dice:

65 decimal >> 1 = 32 or, in hex, 0x000041 >> 1 = 0x00000020

Más en general: el operador ''>>'' divide su operando, como un entero de 32 bits, por la potencia de 2 cuyo valor es la longitud del desplazamiento. Así:

129 decimal >> 1 = 64 or 0x000081 >> 1 = 0x000040 129 decimal >> 2 = 32 or 0x000081 >> 2 = 0x000020 129 decimal >> 5 = 2 or 0x000081 >> 5 = 0x000002

y

129 decimal >> 8 = 0 or: 0x000081 >> 8 = 0x000000

El operador ''<<'' multiplica su operando, como era de esperar.

No sé cómo funciona Math.random (), pero estoy dispuesto a apostar que el cambio de su valor devuelto de punto flotante a la derecha por 0 convierte ese número en un entero, porque el desplazamiento hacia la izquierda y la derecha tiene significado aritmético solo cuando el operando es un número entero.


El operador bit a bit cambia una expresión por una cantidad de dígitos. Entonces en tu ejemplo tienes 65, que es binario 0100 0001 shiftet 1 posición a la derecha, así que tienes 0010 0000 que es 32 decimal.

Otro ejemplo: 48 >> 3 = 6

48 decimal es 0011 0000 binario desplazado 3 a la derecha es 0000 0110 que es 6 decimal.

Para su segundo ejemplo, no puedo ayudarlo. No puedo imaginar por qué cambiaría una expresión por posiciones 0, pero ¿tal vez pueda averiguar cómo depurarla?



Operador de bit a bit >> significa desplazamiento a la derecha.
Mueve el valor binario a la derecha (y elimina el bit del extremo derecho).

65 >> 1 en binario es:

1000001 >> 1 = 100000 = 32

Divide efectivamente el número en 2 y descarta el resto.


Puedes entender por qué la salida es 32 desde la publicación de rsplak. >> es el operador Right Bit Shift y usarlo como >> 1 hará que cada bit se desplace un lugar hacia la derecha. Esto significa que, si el bit más a la derecha fuera 1 , se expulsaría y el bit más a la izquierda contendría 0 .


>> X toma el número binario y mueve todos los dígitos justo por X lugares.

En su ejemplo, usa 65, que es 01000001 en binario. Si cambias ese derecho por uno, el primer espacio (a la izquierda) se llena con un 0, y el último dígito ''cae del final''. Dando 00100000, que es la representación binaria de 32.

>> 0 , por lo tanto, desplaza el número 0 espacios hacia la derecha, y no hace nada.


''<< X'' hace lo mismo, pero cambia el número a la izquierda.


Estos pueden ser comparados con multiplicar por 2 ^ X (desplazamiento a la izquierda) o por 2 ^ X (desplazamiento a la derecha), pero se debe notar que un cambio binario es mucho más rápido que una operación de división.


var size = (Math.random() * 100 >> 0) + 20;

>> 0 en el ejemplo anterior se usa para eliminar la porción fraccionaria, de la siguiente manera:

  1. Math.random () devuelve un número entre 0 y 0.99999999 ...
  2. Este número multiplicado por 100 le da otro número entre 0 y 99.999999 ...
  3. Este número se desplazó a la derecha 0 veces. El número se convierte implícitamente en un entero para la operación de cambio; el desplazamiento a la derecha 0 veces no tiene ningún efecto sobre el valor del entero resultante. De este modo, termina con un número entero entre 0 y 99. Tenga en cuenta que podría haber utilizado la función Math.floor() lugar de >> 0 .
  4. Agregue 20 al número entero, el resultado es un número entero entre 20 y 119.