Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   JAVA (https://www.clubdelphi.com/foros/forumdisplay.php?f=16)
-   -   Trabajar con operadores binarios (https://www.clubdelphi.com/foros/showthread.php?t=68481)

JordiP 16-06-2010 10:36:01

Operaciones con bits
 
Buenas, Estoy traspasando un programa de Java a Delphi y me encuentro en un punto que no entiendo lo que hace. Alguien podría explicarmelo por favor ?

Las lineas en Java son las siguientes:

packet[i++] = (byte) (lenField >>> 7 & 0x7f | 0x80);
packet[i++] = (
byte) (lenField & 0x7f);
packet[i++] = (byte) (dataLen >>> 7 & 0x7f | 0x80);

packet[i++] = (
byte) (partPos >>> 8 & 0xff);
packet[i++] = (
byte) (partPos & 0xff);


el problema esta, evidentemente, en lo que hacen los operadores >>>, & y |

Espero vuestras noticias y gracias:D

coso 16-06-2010 11:03:23

Hola,

Código:

packet[i++] = (byte) (lenField >>> 7 & 0x7f | 0x80);
el operador ++ es de incremento,
el operador >>> es bitwise, o sea, desplazamiento del numero en bits hacia la izquierda, lo que es equivalente a dividir por dos al ser binario. El & es AND y el | es OR.


mcs 16-06-2010 11:03:24

Más o menos sería esto:
Código:

packet[i]=((lenField shr 7) And $7f) Or $80;
Inc(i);
packet[i]=lenfield And $7f;
Inc(i);
packet[i]=((dataLen shr 7) And $7f) Or $80;
Inc(i);

packet[i]=(partPos shr 8) And $ff;
Inc(i);
packet[i]=partPos And $ff;
Inc(i);

Por tanto:
<< equivale a shl, pero conservando el bit de signo
>> equivale a shr, pero conservando el bit de signo
>>> es un shr, pero para datos sin signo
& es un And
| es un Or

JordiP 16-06-2010 11:43:07

Como hacer esto ?
 
Buenas de nuevo, hoy estoy de dudas. Resulta que estoy convirtiendo un codigo de JAVA a Delphi y me encuentro con una duda, no se cual es el equivalente en delphi de:

Código PHP:

packet[i++] = (byte) (lenField >>> 0x7f 0x80);
packet[i++] = (byte) (lenField 0x7f);
packet[i++] = (byte) (dataLen >>> 0x7f 0x80);
packet[i++] = (byte) (dataLen 0x7f);
packet[i++] = (byte) (partPos >>> 0xff);
packet[i++] = (byte) (partPos 0xff); 

Resulta que es un ARRAY de Bytes, eso no es lo complicado, pero si los operedores
Código PHP:

>>> & | 

no a que equivalen en Delphi.

No se si alguien podrá ayudarme con esto.

Gracias de todas maneras

JordiP 16-06-2010 11:48:40

Gracias por la respuesta, esto ya habia podido leerlo en Internet, pero mi problema es que no se como convertirlo a Delphi, es decir, cual sería el codigo equivalente en Delphi de esto:

Código PHP:

lenField >>> 0x7f 0x80
lenField 
0x7f
dataLen 
>>> 0x7f 0x80
partPos 
>>> 0xff
partPos 
0xff 

Teniendo en cuenta que lenField, dataLen y partPos son variables del tipo INTEGER

Gracias de nuevo

mcs 16-06-2010 12:03:19

Ya te hemos respondido en el apartado Java, por lo tanto no dupliques los posts. Y no estaría mal que pusieras un título claro en el post...

JordiP 16-06-2010 12:07:36

MCS, ya se que me habeis respondido, pero a una pregunta diferente. En este caso es como convertir ese codigo a Delphi y por eso lo he puesto aqui y no en el apartado de JAVA

Gracias

mcs 16-06-2010 12:10:51

Cita:

Empezado por JordiP (Mensaje 367415)
MCS, ya se que me habeis respondido, pero a una pregunta diferente. En este caso es como convertir ese codigo a Delphi y por eso lo he puesto aqui y no en el apartado de JAVA

Gracias

A una pregunta diferente?! Espero que no te refieras a esta: http://www.clubdelphi.com/foros/showthread.php?t=68481. Porqué entonces no veo donde está la diferencia.

De todas formas, podrías leerte un poco más detalladamente el hilo anterior (son 3 respuestas en total), y quizá así podrás ver que este bloque de código lo tienes convertido de Java a Delphi...

JordiP 16-06-2010 12:35:21

Solucionado
 
MCS, perdona, ya veo que me dabas una respuesta del equivalente en Delphi, perdona pero no llevo un buen día.

Ya estoy trabajando con la ayuda que me has dado.

Gracias.:D

mcs 16-06-2010 12:36:31

Cita:

Empezado por JordiP (Mensaje 367417)
MCS, perdona, ya veo que me dabas una respuesta del equivalente en Delphi, perdona pero no llevo un buen día.

Ya estoy trabajando con la ayuda que me has dado.

Gracias.:D

No pasa nada... A todos nos pasa a veces que nos saltamos "alguna línea" mientras leemos... ;)

Saludos,

Marc

JordiP 16-06-2010 12:37:39

Solucionado
 
MCS gracias y perdona por la confusion, si que era una respuesta, ya esta solucionado gracias a esa ayuda.

Un saludo

Casimiro Notevi 16-06-2010 13:17:49

Por favor, JordiP, no repitas preguntas en distintos subforos, y titula correctamente, porque "como hacer esto" y "traducción please" no sirve para nadie que luego esté buscando algo sobre el tema, debes poner un título algo más descriptivo.
Por favor, lee nuestra guía de estilo.
Voy a unir ambos hilos en uno solo.
Muchas gracias por tu colaboración.

JordiP 16-06-2010 13:35:00

OK lo hare, perdonad


La franja horaria es GMT +2. Ahora son las 00:53:25.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi