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.638 ]
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
Zoneminder: Substituindo um Unifi NVR
Servidor FTP externo no Ubuntu 12.04 - Criação e configuração
Como criar um box para o Vagrant
Backup automático em Shell Script
Cansou do Konsole e GNOME-Terminal? Existem outros terminais, escolha o seu!
Programando em Shell Script para iniciantes
Introdução ao Shell Script - Baseado no livro de Ken O. Burtch
IA Turbina o Desktop Linux enquanto distros renovam forças
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
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Instalação dualboot Windows 11 e Debian 13 (0)
Programa fora de escala na tela do pc (33)
Eu queria adicionar a incon do wifi e deixa transparente no fluxbox no... (0)









