Portal    Foro    Buscar    FAQ    Registrarse    Conectarse

Dudas Con << Y >>, ~

Dudas Con << Y >>, ~
Artículo
Responder citando    Descargar mensaje  
Mensaje Dudas Con << Y >>, ~ 
 
Otra vez me ha surgido la duda de como traducir este código de javascript  a gambas

Citar:
var key = ((proxyId2 << 16) & 0xffff0000) | proxyId1;
        key = ~key + ((key << 15) & 0xFFFF8000);


A ver si me podeis echar una mano

Saludo



 
jsbsan - Ver perfil del usuario Enviar mensaje privado  
jsbsan [ Martes, 26 Abril 2016, 14:01 ]
 


Dudas Con << Y >>, ~
Comentarios
Responder citando    Descargar mensaje  
Mensaje Re: Dudas Con << Y >>, ~ 
 
¡Coincidencia! ...
me estaban preguntando hace poco por la constante epsilon... que no manejo pero es tu ~  javascript... usado para determinar si una entidad vectorial es igual a otra.      

Y los <<y>> mueven bits...  creo que tengo ejemplos de eso. Los buscaré.



 
vicr - Ver perfil del usuario Enviar mensaje privado  
vicr [ Martes, 26 Abril 2016, 15:03 ]
Responder citando    Descargar mensaje  
Mensaje Re: Dudas Con << Y >>, ~ 
 
vicr:

He encontrado esto:
http://javascript.espaciolatino.com/lengjs/jsgram/op_bin.htm

Citar:
El ordenador, internamente, trata cualquier tipo de datos como una cadena binaria ( ceros y unos). Así los números se representan en sistema binario de numeración mientras que los caracteres se convierten a código ASCII, que son números que se almacenan por tanto codificados en binario. JavaScript ofrece los operadores típicos para trabajar con estas cadenas a nivel de bit (cada uno de los ceros o unos de las cadenas binarias). Para trabajar con estos operadores es conveniente tener una idea previa sobre la codificación binaria.
Complementación ~
Complementa, o niega, una cadena binaria conviertiendo los 1 en 0 y los 0 en 1.
Por ejemplo el número 38 escrito en sistema binario es 00100110 si le aplicamos este operador se convierte en 11011001, o sea el -39 (JavaScript usa codificación en complemento a 2 para los números negativos).

Desplazamiento izquierda <<
Desplaza los bits a la izquierda los lugares que se le indique rellenando con ceros por la derecha y desechando los bits de mayor peso, esto equivale a multiplicar por potencias de 2. Por ejemplo si al 00011010 (26) lo desplazamos 2 a la izquierda tendremos el 01101000 (104).
var num = 26, res;

      res = num <<2>>
Desplaza los bits a la derecha los lugares que se le indique rellenando con ceros por la izquierda y desechando los bits de menor peso, esto equivale a una división entera por potencias de 2. Por ejemplo si al 00011010 (26) lo desplazamos 2 a la derecha tendremos el 00000110 (6).
var num = 26, res;

      res = num << 2;        /* num contendrá
      104 */

AND lógico binario &
Realiza un AND lógico bit a bit entre dos valores. El AND lógico da como resultado 1 sólo si ambos bits son 1. Por ejemplo
                            0 1 1 0 1 1 0 1 (109)
                     AND 0 0 1 0 0 1 1 0 (38)
resultado:            0 0 1 0 0 1 0 0 (36)
var op1 = 109, op2 = 38, res;

      res = op1 & op2;      /*res
       contiene 36 */

OR lógico binario |
Realiza un OR lógico bit a bit entre dos valores. El OR lógico da como resultado 0 sólo si ambos bits son 0. Por ejemplo
                              0 0 1 1 1 0 1 0    (58)
                        OR  0 1 0 1 0 0 1 0     (82)
resultado:              0 1 1 1 1 0 1 0    (122)
En el ejemplo podemos ver la sintaxis del operador
var op1 = 58, op2 = 82, res;

      res = op1 | op2;                    /*res
      contiene 122 */

XOR lógico binario ^
Realiza un XOR lógico bit a bit entre dos valores. El XOR lógico da como resultado 1 si uno sólo de los bits es 1. Por ejemplo
                              0 0 1 1 1 0 1 0    (58)
                        OR  0 1 0 1 0 0 1 0     (82)
resultado:              0 0 1 0 1 0 0 0    (40)
En el ejemplo podemos ver la sintaxis del operador
var op1 = 109, op2 = 38, res;

      res = op1 ^ op2;                 /*res
      contiene 40*/
          


Ahora falta traducirlo al gambas3...  



 
jsbsan - Ver perfil del usuario Enviar mensaje privado  
jsbsan [ Martes, 26 Abril 2016, 20:29 ]
Responder citando    Descargar mensaje  
Mensaje Re: Dudas Con << Y >>, ~ 
 
Mas información:

Operadores Binarios en gambas3:

http://gambaswiki.org/wiki/cat/bit?l=es

Funciones de Manipulación de Bits
BClr    Pone un bit a cero en un número entero.
BSet    Pone a uno un bit en un número entero.
BTst    Comprueba el valor de un bit en un número entero.
BChg    Invierte un bit en un número entero.
Lsl    Desplaza a la izquierda un número entero.
Lsr    Desplaza a la derecha un número entero.
Shl    Desplaza a la izquierda un número entero y mantene el signo.
Shr    Desplaza a la derecha un número entero y mantene el signo.
Rol    Rota a la izquierda un número entero.
Ror    Rota a la derecha un número entero.



 
jsbsan - Ver perfil del usuario Enviar mensaje privado  
jsbsan [ Martes, 26 Abril 2016, 20:37 ]
Responder citando    Descargar mensaje  
Mensaje Re: Dudas Con << Y >>, ~ 
 
jaja se asemeja a ensamblador  



 
v3ctor - Ver perfil del usuario Enviar mensaje privado  
v3ctor [ Martes, 26 Abril 2016, 21:07 ]
Responder citando    Descargar mensaje  
Mensaje Re: Dudas Con << Y >>, ~ 
 
Citar:
Complementación ~
Complementa, o niega, una cadena binaria conviertiendo los 1 en 0 y los 0 en 1.
Por ejemplo el número 38 escrito en sistema binario es 00100110 si le aplicamos este operador se convierte en 11011001, o sea el -39 (JavaScript usa codificación en complemento a 2 para los números negativos).


He hecho esta pequeña función que para numeros entre 0 y 255 vale:
public function complemento(n as integer) as integer
return -(256-(n xor 255))
end



Me he basado en https://es.wikipedia.org/wiki/Complemento_a_dos



 
jsbsan - Ver perfil del usuario Enviar mensaje privado  
jsbsan [ Miercoles, 27 Abril 2016, 08:27 ]
Responder citando    Descargar mensaje  
Mensaje Re: Dudas Con << Y >>, ~ 
 
Julio:

Llevas una buena temporada convirtiendo funciones de javascript que trata el tema de operaciones con binario.
¿ Tanto lo necesitas o es algo que te obsesiona ?.

Te lo digo por que llevo tambien una temporada que quiero aplicar recursión y no es bueno para la salud mental.
Cuando se puede hacer de otras formas más sencillas.

Claro que todo es cuestión de costumbres y entenderlo bien. Cosa que no es siempre fácil cuando ves vídeos en "inglish"

Saludos



 
Shell - Ver perfil del usuario Enviar mensaje privado  
Shell [ Miercoles, 27 Abril 2016, 09:51 ]
Mostrar mensajes anteriores:    
 
Ocultar¡Este tema fue útil?

 

Elegir valoración:                       

Media de valoración Valoración mínima Valoración máxima Número de valoraciones
0.00 0 0 0
 
Publicar nuevo tema  Responder al tema  Página 1 de 1
 
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno