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.828 ]
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;
}
Como criar um box para o Vagrant
JavaScript - Programação orientada a objetos
Servidor FTP externo no Ubuntu 12.04 - Criação e configuração
MathML - Mathematical Markup Language
Zoneminder: Substituindo um Unifi NVR
Reconhecimento de Voz no Linux
Discar BrasilTelecom com PPPOE no Ubuntu 6.10
Cansou do Konsole e GNOME-Terminal? Existem outros terminais, escolha o seu!
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 (25)
Acentos no Teclado Internacional (0)









