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.588 ]
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; }
JavaScript - Programação orientada a objetos
AWK - Manipulação de arquivos de texto
Zoneminder: Substituindo um Unifi NVR
Servidor FTP externo no Ubuntu 12.04 - Criação e configuração
Enviar e-mail pelo terminal com mutt
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
Alternativas ao Multilogin para gerenciamento de múltiplas contas/prof... (0)
Captação de áudio no zorin linux começa a diminuir com o tempo (0)
dpkg: erro: gatilho de arquivo duplicado chamado pelo arquivo de nome (0)
estou na 22.1 e não é atualizado pra 22.4 via "sudo full-upgrade&... (6)