Médio C
Manipulando bits com operadores
Enunciado
Leia um número inteiro sem sinal e exiba o resultado das operações bit a bit: AND com 0x0F, OR com 0xF0, XOR com 0xFF e deslocamento à esquerda em 2 bits. Use os operadores &, |, ^ e <<.
Requisitos
- Ler um
unsigned int. - Aplicar
&com a máscara0x0Fe imprimir o resultado. - Aplicar
|com0xF0e imprimir o resultado. - Aplicar
^com0xFFe imprimir o resultado. - Aplicar
<< 2e imprimir o resultado.
Código inicial
#include <stdio.h>
int main(void) {
unsigned int n;
// Seu código aqui
return 0;
}
Saída esperada
Digite um numero: 42
AND com 0x0F: 10
OR com 0xF0: 250
XOR com 0xFF: 213
Deslocamento a esquerda 2: 168
Ver dica
Use %u para imprimir unsigned int. As máscaras podem ser escritas em hexadecimal: 0x0F, 0xF0, 0xFF.
Mostrar solução
#include <stdio.h>
int main(void) {
unsigned int n;
printf("Digite um numero: ");
scanf("%u", &n);
printf("AND com 0x0F: %u\n", n & 0x0F);
printf("OR com 0xF0: %u\n", n | 0xF0);
printf("XOR com 0xFF: %u\n", n ^ 0xFF);
printf("Deslocamento a esquerda 2: %u\n", n << 2);
return 0;
}
Passo a passo
- Declaramos
ncomounsigned intpara garantir que os bits sejam tratados sem sinal. - Lemos o valor com
scanf("%u", &n). n & 0x0Faplica uma máscara que mantém apenas os 4 bits menos significativos.n | 0xF0liga os 4 bits mais significativos do byte menos significativo.n ^ 0xFFinverte os 8 bits menos significativos.n << 2desloca todos os bits duas posições à esquerda, equivalendo a multiplicar por 4.
Por que funciona
Cada operador bit a bit atua em cada bit individualmente. A máscara 0x0F (00001111) isola os bits baixos no AND. O OR com 0xF0 (11110000) força os bits altos a 1. O XOR com 0xFF inverte os 8 bits menos significativos. O deslocamento à esquerda move os bits e preenche com zeros à direita.
Erros comuns
- Usar
%dem vez de%uparaunsigned int: pode imprimir valores negativos incorretamente. - Esquecer que
<<pode causar overflow se os bits ultrapassarem o tamanho do tipo. - Confundir
&(bit a bit) com&&(lógico):n & 0x0Fé diferente den && 0x0F.
Outra forma de resolver
Poderia usar printf com formato binário manual, mas a biblioteca padrão não tem %b. Uma alternativa é usar uma função auxiliar para imprimir bits, mas não é necessário para este exercício.
Saída esperada
Digite um numero: 42
AND com 0x0F: 10
OR com 0xF0: 250
XOR com 0xFF: 213
Deslocamento a esquerda 2: 168