Fórum bit da char #283779

03/06/2005

0

galera, alguem sabe como que compara bit a bit de uma char?? eu sei que tem um comando em delphi que já faz isso..

obrigado

Eduardo


Edusjc

Edusjc

Responder

Posts

03/06/2005

Beppe

Uma maneira é assim:

for I := 0 to 7 do
  if Ord(Ch1) and (1 shl I) <> Ord(Ch2) and (1 shl I) then
    { os bits diferem }



Responder

Gostei + 0

13/06/2005

Edusjc

só uma duvida, esse algoritmo vai comparar os bits entre 2 char, mas como que eu faço para comparar apenas uma char, por exemplo, to lendo a porta serial e tá chegando uma char, só que preciso saber o que tem nos bits da char, pois primeiro preciso saber se os dois bits mais significativos tenho 1 neles para saber que o resto da mensagem me interessa, e depois, com o restante dos bits, preciso saber qual dos bits está como 0, para saber qual das chaves foram acionadas? tem como fazer isso através desse for???

obrigado


Responder

Gostei + 0

14/06/2005

Beppe

Para testar o valor de um bit, use ´Valor and (1 shl Posicao_Bit)´. Se retornar <> 0, então o bit é 1.

Para testar os mais significativos, vc testa o 6 e o 7.


Responder

Gostei + 0

14/06/2005

Edusjc

Nesse caso, o campo que vc colocou Valor seria o Ord(variavel_char)?
por exemplo, se eu coloco em uma variavel do tipo char, o equivalente ao 254 em decimal que quer dizer 11111110, eu deveria mostrar uma mensagem de que a chave 1 foi acionada então fiz o seguinte código

if Ord(ch) and (1 shl 7)<>0 then
   if Ord(ch) and (1 shl 6)<>0 then
   begin
   if ord(ch) and (1 shl 0)=0 then
      memo1.Lines.Add(´chave1´)
      else
      if ord(ch) and (1 shl 1)=0 then
         memo1.Lines.Add(´chave2´)
         else
         if ord(ch) and (1 shl 2)=0 then
            memo1.Lines.Add(´chave3´)
            else
            if ord(ch) and (1 shl 3)=0 then
               memo1.Lines.Add(´chave4´)
               else
               if ord(ch) and (1 shl 4)=0 then
                  memo1.Lines.Add(´chave5´)
                  else
                  if ord(ch) and (1 shl 5)=0 then
                     memo1.Lines.Add(´chave6´)

só que com esse código ele não apresenta nenhuma mensagem. Tem algum erro no que digitei??

obrigado

Eduardo


Responder

Gostei + 0

15/06/2005

Beppe

Funcionou perfeitamente aqui. Tem certeza de que o valor é 254?


Responder

Gostei + 0

15/06/2005

Edusjc

sim.. como foi que vc testou aí??


Responder

Gostei + 0

15/06/2005

Beppe

Apenas envolvi seu código com o que faltava. + um TMemo e TButton.

var
  Ch: Char;
begin
  Ch := #254;
  { aquele seu código aqui }
  end;
end;



Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar