Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Operaciones de Bits en Delphi (https://www.clubdelphi.com/foros/showthread.php?t=87411)

jars 30-12-2014 17:42:31

Operaciones de Bits en Delphi
 
Hola amigos.
Alguien me podría decir que significa esto?
Código Delphi [-]
var
  B4: Integer;
begin
  B4 := ((gNumber shr 8) and $FF) + 22;
...
Gracias

Casimiro Notevi 30-12-2014 18:09:18

Recuerda poner los tags al código fuente, ejemplo:



Gracias :)

jars 30-12-2014 18:15:05

En el apuro se me paso, lo lamento.

AgustinOrtu 30-12-2014 19:05:02

Revisa esto: Delphi Bascis: Shr command

nlsgarcia 30-12-2014 19:12:15

jars,

Cita:

Empezado por jars
...¿Que significa esto?...
Código Delphi [-]
B4 := ((gNumber shr 8) and $FF) + 22;

:rolleyes:

Te comento : gNumber es desplazado 8 bits a la derecha con SHR, luego al resultado obtenido se le aplica una operación AND con 255 y al final se le suma 22, esto es algo muy específico y el significado práctico depende del algoritmo que implemente este resultado.

Revisa esta información:
Espero sea útil :)

Nelson.

Casimiro Notevi 30-12-2014 19:14:43

B4 := ((gNumber shr 8) and $FF) + 22;

Bueno, si mal no recuerdo, eso significa que al número gnumber, en binario, lo 'rota' hacia la derecha (shr) 8 posiciones (desplaza los bits).
Luego hace un 'and' con 255 en binario (FF en hexa) (1 and 1=1, 0 and 0=0, etc.)
Al resultado, finalmente, se le suma 22

Casimiro Notevi 30-12-2014 19:15:18

Se me adelantó nlsgarcia
:)

ecfisa 30-12-2014 20:21:01

Hola Jars.

Sumando algo a lo que bíen han explicado los compañeros, primero definimos estos datos:
Código:

shr (desplaza bits a la derecha)
and (realiza un producto lógico)
$FF(Hexa) = 255d= 11111111b

Ahora supongamos que gNumber = 119, entonces:
Código:

(gNumber shr 8); 01110111 shr 8  = 0
((    0      ); and 11111111 = 0
( 0 ) + 22
B4 = 22

Entonces para el intervalo cerrado [0,255] B4 tomará el valor 22, de otro modo será: B4 = 22 + gNumber div 256.

Saludos :)

jars 30-12-2014 21:01:02

Gracias a todos por responder.
Ecfisa, con el ejemplo me aclaraste todo.

Saludos

alquimista 02-01-2015 00:31:37

Aunque es tarde ya...
Por poner algo distinto
Un solo desplazamiento a la derecha es similar a dividir por 2
Un solo desplazamiento a la izda es similar a multiplicar por 2.

(a div 4) es similar a (a shr 2)-> instrucción mas rápida creo.

:) Feliz Año 2015 después de la resaca.

Casimiro Notevi 02-01-2015 10:20:04

Cita:

Empezado por alquimista (Mensaje 487239)
Aunque es tarde ya... Por poner algo distinto
Un solo desplazamiento a la derecha es similar a dividir por 2
Un solo desplazamiento a la izda es similar a multiplicar por 2.
(a div 4) es similar a (a shr 2)-> instrucción mas rápida creo.
:) Feliz Año 2015 después de la resaca.

Nunca es tarde, sobre todo si la expliicación es tan clara.
Un ejemplo con tu explicación:
Cita:

00001000 = 8
shr 2 = 2 desplazamientos de bits a la derecha = dividir entre 2 y dividir entre 2
00000100 = 4 (primer desplazamiento=dividir entre 2)
00000010 = 2 (segundo desplazamiento=dividir entre 2)


La franja horaria es GMT +2. Ahora son las 07:41:31.

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