Fácil C

Verificar bit específico

Enunciado

Escreva um programa que leia um número inteiro sem sinal e a posição de um bit (0 a 31). Use máscara e shift para verificar se o bit está ligado e imprima 1 se estiver, 0 caso contrário.

Requisitos

  • Ler dois valores: número e posição do bit.
  • Usar 1u << pos para criar a máscara.
  • Imprimir apenas 1 ou 0.

Código inicial

#include <stdio.h>

int main(void) {
    unsigned int num;
    int pos;
    scanf("%u %d", &num, &pos);
    // seu código aqui
    return 0;
}

Saída esperada

1
Ver dica

Crie uma máscara com 1u << pos e use & com o número. O resultado será 0 ou diferente de 0.

Mostrar solução
#include <stdio.h>

int main(void) {
    unsigned int num;
    int pos;
    scanf("%u %d", &num, &pos);

    // Cria máscara com o bit na posição desejada
    unsigned int mask = 1u << pos;

    // Testa se o bit está ligado
    if (num & mask) {
        printf("1\n");
    } else {
        printf("0\n");
    }

    return 0;
}

Passo a passo

  1. Declaramos num como unsigned int para evitar surpresas com shift em valores negativos.
  2. 1u << pos desloca o valor 1 para a posição pos, criando uma máscara com apenas aquele bit ligado.
  3. A expressão num & mask faz AND bit a bit: o resultado será diferente de zero apenas se o bit correspondente em num estiver ligado.
  4. O if testa esse resultado e imprime 1 ou 0.

Por que funciona

O operador & compara cada bit dos dois operandos e retorna 1 somente quando ambos são 1. Como a máscara tem apenas um bit ligado, o resultado isola exatamente o bit desejado. Se ele for 1, o valor final é a própria máscara (diferente de zero); se for 0, o resultado é zero.

Erros comuns

  • Usar 1 << pos sem o sufixo u: se pos for 31, 1 << 31 pode ser comportamento indefinido em int com sinal. Use 1u.
  • Esquecer de ler a posição como int e usar %u no scanf, causando lixo na variável.
  • Comparar (num & mask) == 1: isso só é verdade se o bit 0 estiver ligado; o correto é testar != 0 ou usar a máscara diretamente.

Outra forma de resolver

Pode-se deslocar o próprio número para trazer o bit para a posição 0 e então mascarar com 1:

printf("%u\n", (num >> pos) & 1u);

Essa forma é mais curta, mas menos intuitiva para iniciantes.

Saída esperada

1