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 << pospara criar a máscara. - Imprimir apenas
1ou0.
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
- Declaramos
numcomounsigned intpara evitar surpresas com shift em valores negativos. 1u << posdesloca o valor 1 para a posiçãopos, criando uma máscara com apenas aquele bit ligado.- A expressão
num & maskfaz AND bit a bit: o resultado será diferente de zero apenas se o bit correspondente emnumestiver ligado. - O
iftesta esse resultado e imprime1ou0.
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 << possem o sufixou: seposfor 31,1 << 31pode ser comportamento indefinido emintcom sinal. Use1u. - Esquecer de ler a posição como
inte usar%unoscanf, causando lixo na variável. - Comparar
(num & mask) == 1: isso só é verdade se o bit 0 estiver ligado; o correto é testar!= 0ou 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