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.972 ]
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; }
AWK - Manipulação de arquivos de texto
Como criar um box para o Vagrant
Zoneminder: Substituindo um Unifi NVR
Servidor FTP externo no Ubuntu 12.04 - Criação e configuração
Mostrando dicas ao iniciar o terminal
Simples e rápido: matando todos os processos de um usuário
Cansou do Konsole e GNOME-Terminal? Existem outros terminais, escolha o seu!
Explorando a entrada de dados com READ em Bash Shell
Atualizar o macOS no Mac - Opencore Legacy Patcher
Crie alias para as tarefas que possuam longas linhas de comando - bash e zsh
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
Como instalar o navegador TOR no seu Linux
Instalando Zoom Client no Ubuntu 24.04 LTS
Instalando Zoom Client no Fedora 40
Instalando Navegador Firefox no Debian 12
Bloqueando propagandas no Youtube e outros sites com o uBlocker Origin