Olá a todos. estou com uma duvida

tem como eu extrair bits de um numero inteiro? vou dar um exemplo:

um numero inteiro 255, onde eu quero ler os 3 primeiros bits, depois quero ler o próximos 3 bits e por fim ler os 2 últimos bits. e gostaria de guardar em variáveis inteiras separadas.

mais ou menos assim.

int teste = 255;

255 em binário é 111 111 11.

int a = 3 primeiros bits já transformados em inteiro que é o numero 7;

int b = bits 4, 5, 6 que transformados fica 7;

int c = 2 últimos bits que transformados fica 3;

 tem com eu fazer esta operação ai?

obrigado

Exibições: 1713

Responder esta

Respostas a este tópico

Você precisa conhecer um pouco sobre as operações de bitwise.

Olhe esse link.

http://www.cprogramming.com/tutorial/bitwise_operators.html

eu tinha visto sobre bitwise mas não tinha entendido e achei que não era este o caminho. vou dar mais uma olhada agora mesmo

A classe String possui um construtor que converte um número decimal para binário dessa forma:

int teste = 255;

String binTeste =  String(teste, BIN);

Depois, é só extrair de binTeste os valores que você quer usando substrings e converter para decimal novamente

obrigado pela resposta tmbm vou dar uma olhada, estou sem meus Arduinos aqui mas eu chego em casa e já testo.

Eu imaginei que era mais fácil. Tipo " ler o 3 primeiros bits da variável tal e pronto". mas parece que e bem mais complexo que eu imaginava.

Napster, boa noite!

Esqueça minha sugestão. Dá pra fazer com Strings, mas é mais trabalhoso.

A ideia do Flavio é excelente.

Você vai ter que usar operações de bitwise AND e shift right

Exemplo:

Faça um AND do número com 11 em binário e já terá a variável c 

nos seu caso seria 

byte teste = 255;

byte c = teste & 3;

Isso resultaria nos 2 últimos bits( se teste = 255, retornaria 3)  

Depois para obter o número b precisaria fazer um AND com 00011100 e 2 shifts

byte b = teste & 28;

b = b >> 2;

Por último:

byte a = teste & 224;

a = a >> 5;

Não consigo testar aqui. Veja se dá certo aí.

Basta fazer uma operação AND do valor com os bits que desaja extrair a depois fazer um shift para direita com o numero de posições restantes à direita.

int teste = 255;
int a;
int b;
int c;

a = teste & 0b111;

b = teste &111000;
b = b >> 3;

c = teste & 11000000;
c = c >> 6;

Sr. N, bom dia.
Existe uma função " nativa" do arduino que executa a separação dos bits de um byte.
A bitread ();
Experimente fazer como no arquivo anexado.

Rui

Anexos

fiz da forma que o Jose Augusto Cintra e parece que funcionou muito bem, eu vou dar uma olhada melhor nas outras dicas e implementar ela no meu código.

desde já agradeço a todos pela ajuda. não tinha ideia de como fazer isto.

obrigado mesmo.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço