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.826 ]
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
MathML - Mathematical Markup Language
Como criar um box para o Vagrant
Criando um banner em flash no Linux
Introdução ao uso de Shell Script
Recursos avançados do bash que você não aprende na escola
Monitoramento automático de logs e alertas por e-mail - Fácil e explicado
Variáveis, if, else e unless em Ruby
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Jogar games da Battle.net no Linux com Faugus Launcher
Como fazer a Instalação de aplicativos para acesso remoto ao Linux
Como fazer a instalação do Samba
Como fazer a conversão binária e aplicar as restrições no Linux
Duas Pasta Pessoal Aparecendo no Ubuntu 24.04.3 LTS (21)
Formas seguras de instalar Debian Sid (13)
Malware encontrado em extensões do Firefox. (0)
Fiz uma pergunta no fórum mas não consigo localizar [RESOLVIDO] (21)









