Dudas Con << Y >>, ~


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

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

Profile PM  
Subject: 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...

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

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

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

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


Page 1 of 1


  
You cannot post new topics
You cannot reply to topics
You cannot edit your posts
You cannot delete your posts
You cannot vote in polls
You cannot attach files
You can download files
You cannot post calendar events

   

This is a "Lo-Fi" version of our main content. To view the full version with more information, formatting and images, please click here.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Generation Time: 0.1282s (PHP: -43% SQL: 143%)
SQL queries: 23 - Debug Off - GZIP Enabled