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: 37.851 ]
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
Servidor FTP externo no Ubuntu 12.04 - Criação e configuração
AWK - Manipulação de arquivos de texto
MathML - Mathematical Markup Language
Wordpress em 30 segundos com WP-CLI
Cansou do Konsole e GNOME-Terminal? Existem outros terminais, escolha o seu!
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Título: Descobrindo o IP externo da VPN no Linux
Armazenando a senha de sua carteira Bitcoin de forma segura no Linux
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Instalando Brave Browser no Linux Mint 22
vídeo pra quem quer saber como funciona Proteção de Memória:
Encontre seus arquivos facilmente com o Drill
Mouse Logitech MX Ergo Advanced Wireless Trackball no Linux
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Remoção de propaganda com o programa Comskip[AJUDA] (4)
Instalação do drive do adaptador wiffi (5)
Linux Lite Demorando Muito Para Ligar (1)