Dudas Con << Y >>, ~


Objetivo: 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

Objetivo: 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é.

Perfil MP  
Objetivo: 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...

Objetivo: 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.

Objetivo: Re: Dudas Con << Y >>, ~
jaja se asemeja a ensamblador

Objetivo: 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

Objetivo: 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


Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
No puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.1028s (PHP: 41% SQL: 59%)
Consultas SQL: 19 - Debug off - GZIP Activado