Bitwise - Escovando os bits
Bitwise é uma técnica que consiste, basicamente, em alterar a sequência de bits de uma variável. Nesse artigo, pretendo mostrar como trabalhar com os principais operadores Bitwise na linguagem C.
[ Hits: 38.201 ]
Por: Paulo Dias em 06/02/2015 | Blog: http://naotenhosite.eu.nao.tenho
char a = 0b101; // binario char b = 0xff; // hexa
int main(int argc, char **argv) { char hotel;
hotel = 0b101; //temos 2 quartos ocupados ( 0000 0101 )
return 0; }
// o quarto é um valor entre 0 e 7 inclusive, // seria importante testar esse valor int estaOcupado( char hotel, int quarto ) { char teste = 1; // 0000 0001 // rotaciona para que o bit ligado fique no quarto desejado teste = teste << quarto; // se o retorno for diferente de 0 o quarto esta ocupado return hotel & teste; } int main(int argc, char **argv) { char hotel; hotel = 0b101; if( estaOcupado( hotel, 0 ) ) printf(" O quarto 0 esta ocupado \n" ); return 0; }
void ocuparQuarto( char* hotel, int quarto ) { char teste = 1; // 0000 0001 teste = teste << quarto; // o bit ligado do teste garante que o quarto vai ficar ocupado, // os outros bits do teste estão desligados e não vão alterar o hotel *hotel = *hotel | teste; } int estaOcupado( char hotel, int quarto ) { char teste = 1; // 0000 0001 teste = teste << quarto; return hotel & teste; } int main(int argc, char **argv) { char hotel; hotel = 0b101; if( estaOcupado( hotel, 1 ) ) printf(" O quarto 1 esta ocupado \n" ); else printf(" O quarto 1 nao esta ocupado \n" ); ocuparQuarto( &hotel, 1 ); if( estaOcupado( hotel, 1 ) ) printf(" O quarto 1 esta ocupado \n" ); else printf(" O quarto 1 nao esta ocupado \n" ); return 0; }
void liberarQuarto( char* hotel, int quarto ) { char teste = 1; // 0000 0001 teste = teste << quarto; // inverte o teste, 0000 0001 fica 1111 1110 teste = ~teste; // o bit desligado do teste garante que o quarto vai ser liberado, // os bits ligados do teste não alteram o hotel. *hotel = *hotel & teste; } void ocuparQuarto( char* hotel, int quarto ) { char teste = 1; // 0000 0001 teste = teste << quarto; *hotel = *hotel | teste; } int estaOcupado( char hotel, int quarto ) { char teste = 1; // 0000 0001 teste = teste << quarto; return hotel & teste; } int main(int argc, char **argv) { char hotel; hotel = 0b101; if( estaOcupado( hotel, 1 ) ) printf(" O quarto 1 esta ocupado \n" ); else printf(" O quarto 1 nao esta ocupado \n" ); ocuparQuarto( &hotel, 1 ); if( estaOcupado( hotel, 1 ) ) printf(" O quarto 1 esta ocupado \n" ); else printf(" O quarto 1 nao esta ocupado \n" ); liberarQuarto( &hotel, 1 ); if( estaOcupado( hotel, 1 ) ) printf(" O quarto 1 esta ocupado \n" ); else printf(" O quarto 1 nao esta ocupado \n" ); return 0; }
Zoneminder: Substituindo um Unifi NVR
MathML - Mathematical Markup Language
JavaScript - Programação orientada a objetos
Como criar um box para o Vagrant
Slackware - Script de instalação de programas
Reconhecimento de Voz no Linux
Introdução ao Shell Script (parte 2)
Aprenda a Gerenciar Permissões de Arquivos no Linux
Como transformar um áudio em vídeo com efeito de forma de onda (wave form)
Como aprovar Pull Requests em seu repositório Github via linha de comando
Aplicativo simples para gravar tela
Quebra de linha na data e hora no Linux Mint
Firefox não abre em usuário não administradores (0)
Sempre que vou baixar algum pacote acontece o erro dpkg (8)
tentando instalar em um notebook antigo o Linux LegacyOS_2023... [RESO... (8)