Ver Mensaje Individual
  #11  
Antiguo 13-10-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por Panasys Ver Mensaje

Ahora cuando trabajo con pocas entradas no pasa nada, el codigo es corto y rapido, pero si tengo que procesar 8 bits se complica ya que obtengo de 0 a 255 combinaciones posibles entre esos bits!

hay algun metodo que yo pueda usar para decirle oye cuenta pero solo los impares hasta 255??? y el bit 2 cuenta 2,4 7,8 etc?
Al leer tu segundo post veo que hablas de 'bits' no de bytes por lo que pareciera que querés obtener la sumatoria
de los 'bits' pares e impares recibidos...

Si no entiendo mál y es eso lo que buscas, podrías hacer:
Código Delphi [-]
procedure SumaBitParImpar(Num: Integer; var Par, Non: Integer);
var
  i,c : Byte;
begin
  c:= 0;
  for i:= 0 to 7 do
   if (Num shr i) and 1 = 1 then // verificar sucesivos bits encendidos
     Inc(c);
  if Num and 00000001 = 1 then  //También puede ser: if Odd(Num), pero ya que estamos con bits...
    Non:= Non + c
  else
    Par:= Par + c
end;

Ejemplo de llamada:
Código Delphi [-]
...
var
  i: Integer;
  Par, Non: Integer;
begin
  Par:= 0;
  Non:= 0;
  for i:= 1 to 3 do
    SumaBitParImpar(i,Par,Non);
  ShowMessage(Format('Par: %d Impar: %d',[Par,Non]));
end;
Lo que te arroja el mensaje: 'Par: 1 Impar: 3' dado que:
1 = 01 (un bit número impar)
2 = 10 (un bit número par)
3 = 11 (dos bits número impar)

Es sólo un ejemplo, modificando un poco el código podes hacer que solo haga el conteo de bits por numero recibido, o en última instancia, espero que te aporte alguna idea...

Saludos.

Última edición por ecfisa fecha: 13-10-2010 a las 21:18:08.
Responder Con Cita