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: 36.924 ]
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
Como criar um box para o Vagrant
MathML - Mathematical Markup Language
AWK - Manipulação de arquivos de texto
Programar em Shell - Script só para os baixinhos
Discar BrasilTelecom com PPPOE no Ubuntu 6.10
Atenção a quem posta conteúdo de dicas, scripts e tal (2)
Criando um gateway de internet com o Debian
Configuração básica do Conky para mostrar informações sobre a sua máquina no Desktop
Aprenda a criar músicas com Inteligência Artificial usando Suno AI
Entendendo o que é URI, URL, URN e conhecendo as diferenças entre POST e GET
Ativando o Modo Noturno via Linha de Comando no GNOME/Wayland
Preparando pendrive com GNU/Linux [Corretamente!]
Instalando Google Chrome no Fedora 40
Habilitando a importação de senhas no Firefox
Como corrigir o erro do VirtualBox travar a máquina virtual em tela cheia
Dificuldade de instalar Apache Office no Zorin17 (1)
Como saber quantas impressões foram feitas pela impressora? (3)
Altera pacote .pkg.tar do Arch Linux (17)