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: 39.192 ]
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
Zoneminder: Substituindo um Unifi NVR
MathML - Mathematical Markup Language
Servidor FTP externo no Ubuntu 12.04 - Criação e configuração
AWK - Manipulação de arquivos de texto
Programando em Shell Script para iniciantes
Simples e rápido: matando todos os processos de um usuário
Introdução ao Shell Script (parte 2)
Slackware - Script de instalação de programas
A Fundação da Confiança Digital: A Importância Estratégica de uma PKI CA na Segurança de Dados
Como enviar dicas ou artigos para o Viva o Linux
Como Ativar a Aceleração por GPU (ROCm) no Ollama para AMD Navi 10 (RX 5700 XT / 5600) no Gentoo
Cairo Dock ainda funcional nos dias de hoje
Configuração de IP fixo via nmcli e resolução de nomes via /etc/hosts no Gentoo
Removendo o bloqueio por erros de senha no Gentoo (systemd)
Papel de Parede Animado no KDE Plasma 6 (Com dicas para Gentoo)
Homebrew: o gerenciador de pacotes que faltava para o Linux!
Tentando fazer um "linux ricing" mas falhando miseravelmente... (2)
Elilo e Sofrimento no Slackware (3)
Não consigo instalar as bibliotecas em Python pelo terminal. (1)









