Foros del Web » Programando para Internet » Javascript »

No entiendo este codigo

Estas en el tema de No entiendo este codigo en el foro de Javascript en Foros del Web. Tengo un codigo sacado de internet y he encontrado cosas que no comprendo lo que hacen. A ver si me podeis ayudar, gracias!! Para empezar, ...
  #1 (permalink)  
Antiguo 08/05/2006, 03:23
Avatar de oskarL  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 499
Antigüedad: 19 años
Puntos: 2
No entiendo este codigo

Tengo un codigo sacado de internet y he encontrado cosas que no comprendo lo que hacen. A ver si me podeis ayudar, gracias!!

Para empezar, no comprendo que significa "<<" ó ">>", o incluso ">>>"
Ej: var a = (1 << 8) - 1;

No se de que manera aumenta la "i" en este for
Ej: var sz=8; for(var i = 0; i < str.length * sz; i += sz){ instrucciones }

Que significa esta asignacion? "|=" Y de nuevo ">>" para acceder a un array
Ej: array[i>>5] |= algo;
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.

Última edición por oskarL; 08/05/2006 a las 03:42
  #2 (permalink)  
Antiguo 09/05/2006, 03:52
Avatar de oskarL  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 499
Antigüedad: 19 años
Puntos: 2
me ayudais a comprender el funcionamiento de estas instrucciones por favor? gracias
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.
  #3 (permalink)  
Antiguo 09/05/2006, 04:46
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 4 meses
Puntos: 61
Por lo que he podido comprobar

a=(b << c)

a tomará el valor de b multiplicado por 2 elevado a c

i+=a
esto es lo mismo que poner:

i=i+a

Y la última la estoy estudiando...
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
  #4 (permalink)  
Antiguo 09/05/2006, 05:05
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola:

Me parece que tanto << como >> significa desplazamientos de bits, y que en binario significa dividir o multiplicar por 2 las veces indicadas en segundo lugar... el uso de tres signos podría tratarse de rotación de bits... y eso es bastante más complejo porque recuerdo que ensamblador el hueco que deja el desplazamiento se rellena con el bit de acarreo (carry flag)... pero en javascript no tengo idea como se implementa... (la verdad es que no estoy nada seguro ... )

En los desplazamientos de bits el hueco se llena con un cero y de ahí que equivalga a una operación de división/multiplicación por 2:

4 = 00000100
4 << 1 = 0000100[0] // entrecorcheto el valor desplazado... y el primer valor se queda en el carry flag...

Como verás es una respuesta un poco difícil de comprender y no creo que haya muchas posibilidades de uso en páginas web...

Y la última cosa... tampoco tengo la más mínima idea... y no sería raro de que se tratase de otra operación a nivel de bits.

Espero que te haya servido...

Hola KarlanKas

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #5 (permalink)  
Antiguo 09/05/2006, 05:28
Avatar de oskarL  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 499
Antigüedad: 19 años
Puntos: 2
Uff, si que es complicado si. Me lo he leido de un tiron y me he quedao flipando, jeje. Ya lo leere mas tarde con mas detinimiento y analizando cada parte que explicas, muchas gracias!!
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.
  #6 (permalink)  
Antiguo 09/05/2006, 08:58
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola:

Hace poco vi un artículo en maestrosdelweb, y como es bastante reciente no tardé mucho en encontrarlo: http://www.maestrosdelweb.com/editorial/manejandobits/

Si lo ves útil hazle un comentario que se agradece... la verdad es que yo lo vi por encima porque ya estaba enterado del tema, pero creo que está escrito con algo más de detalle.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #7 (permalink)  
Antiguo 09/05/2006, 09:26
Avatar de oskarL  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 499
Antigüedad: 19 años
Puntos: 2
Si si, perfectamente util! ya lo he entendido.

Basicamente se trata de "transformar" numeros, desplazando sus bits, lo que pasa es que ese desplazamiento implica que los numeros se multiplican y dividen por el numero de veces que se desplaza el bit, dependiendo si se mueven hacia la derecha o la izquierda, correcto? jeje

Tienes razon, utilidad parece no tiene demasiada... pero he aprendido una cosa mas, jeje.

Gracias!
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.
  #8 (permalink)  
Antiguo 09/05/2006, 09:49
Avatar de dogduck  
Fecha de Ingreso: enero-2006
Ubicación: ¿Atlantida, Hesperides, Islas afortunadas?
Mensajes: 2.231
Antigüedad: 18 años, 4 meses
Puntos: 19
Por ejemplo , en java para multiplicar un nº por 2 se puede hacer un desplazamiento de un bit a la derecha
Código:
long startTime=System.currentTimeMillis()<<1;
Lo que no sabia es que se pudieran hacer estas operaciones en JavaScript. Todos los días se aprenden cosas ...
  #9 (permalink)  
Antiguo 09/05/2006, 10:44
 
Fecha de Ingreso: mayo-2006
Mensajes: 49
Antigüedad: 18 años
Puntos: 2
Efectivamente se trata de desplazamiento de bits:
res = 7<<1 -> desplaza 7 (0000111), 1 bit a la izquierda -> res = 0001110
res = 7>1 -> desplaza 7 (0000111), 1 bit a la derecha -> res = 00000111

Hay que estudiar un poco de algebra de boole, pero os puedo adelantar que desplazar 1 bit a la izquierda es multiplicar x2 y desplazar a la derecha es dividir /2

---------------------
Carles Martínez xatcom.net
  #10 (permalink)  
Antiguo 10/05/2006, 01:30
Avatar de oskarL  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 499
Antigüedad: 19 años
Puntos: 2
Aun queda el tema de esta asignacion: "|="

Alguien sabe a que se puede refererir?
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.
  #11 (permalink)  
Antiguo 10/05/2006, 10:05
Avatar de Cap.Buscapina  
Fecha de Ingreso: octubre-2004
Ubicación: Argentina
Mensajes: 836
Antigüedad: 19 años, 6 meses
Puntos: 4
Cita:
Iniciado por oskarL
Aun queda el tema de esta asignacion: "|="

Alguien sabe a que se puede refererir?
transcribo (ya que no me puse a hacer ningun ejemplo, que cuando tenga tiempo, prbaré):

Cita:
Realiza una operación OR de bits en el valor de una variable y el valor de una expresión y asigna el resultado a la variable.

Cita:
resultado |= expresión
Argumentos

resultado
Cualquier variable.

expresión
Cualquier expresión.

Comentarios

Usar este operador es exactamente igual que especificar:

Cita:
resultado = resultado | expresión
El operador |= obtiene la representación binaria de los valores de resultado y expresión y realiza una operación OR con los bits de las misma. La salida de esta operación se comporta de esta forma:

0101 (resultado)
1100 (expresión)
----
1101 (salida)


Cada vez que cualquiera de las dos expresiones tiene un 1 en un dígito, el resultado tendrá un 1 en ese dígito. De otra forma, el resultado es 0 en ese dígito.
saludos
__________________
by Capitán Buscapina
.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:27.