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?
El operador de desplazamiento bit a bit desplaza cada bit de la entrada x bits hacia la derecha (>>) o hacia la izquierda (<<).
65 es 1000001, entonces 65 >> 1 = 0100000, que es 32.
EDITAR
Aquí hay algunos enlaces útiles:
http://en.wikipedia.org/wiki/Bitwise_operation
http://javascript.about.com/library/blbitop.htm
http://www.java2s.com/Tutorial/JavaScript/0040__Operators/ShiftLeft.htm
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:
- Math.random () devuelve un número entre 0 y 0.99999999 ...
- Este número multiplicado por 100 le da otro número entre 0 y 99.999999 ...
- 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
. - Agregue 20 al número entero, el resultado es un número entero entre 20 y 119.