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áscara 0x0F e imprimir o resultado.
  • Aplicar | com 0xF0 e imprimir o resultado.
  • Aplicar ^ com 0xFF e imprimir o resultado.
  • Aplicar << 2 e 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

  1. Declaramos n como unsigned int para garantir que os bits sejam tratados sem sinal.
  2. Lemos o valor com scanf("%u", &n).
  3. n & 0x0F aplica uma máscara que mantém apenas os 4 bits menos significativos.
  4. n | 0xF0 liga os 4 bits mais significativos do byte menos significativo.
  5. n ^ 0xFF inverte os 8 bits menos significativos.
  6. n << 2 desloca 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 %d em vez de %u para unsigned 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 de n && 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