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
Tags:
Você precisa conhecer um pouco sobre as operações de bitwise.
Olhe esse link.
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
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.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por