Manual

do

Maker

.

com

Desafio Maker 07: Resposta

Desafio Maker 07: Resposta

E antes de mostrar a resposta do Desafio Maker 07, permita-me revelar a razão que me deu a ideia de fazê-lo.

No ducentésimo quinquagésimo sexto dia do ano, comemora-se o dia do programador. Então com atraso, meus parabéns aos programadores. Menos ao que me motivou escrever o Desafio Maker 07.

As redes sociais normalmente circulam homenagens em texto e/ou imagem, mas essa aqui no Telegram me chamou a atenção (negativamente):

dia-do-programador.jpg

O primeiro parágrafo já mata toda a empolgação. De fato, o dia do programador é comemorado no 256o dia do ano, sendo em 12 ou 13 de Setembro, dependendo se o ano é bissexto. O problema aqui é que o byte foi explicado de forma errada. Corrijo.

Um byte (como conhecemos) é composto por 8 bits. Os bits são lidos da direita para a esquerda. Seus valores são 2 elevado à potência posicional, começando em 0. Logo, 2^0 = 1, porque todo o número elevado a 0 é 1. Assim sendo, temos em um byte os valores:

128 64 32 16 8 4 2 1

Então, temos os valores de 2^0 até 2^7. Perceba que 2^8 realmente é 256, mas não é um valor contido no byte. Somando todos os bits, temos 255. Se todos os bits forem 0, temos daí a ducentésima quinquagésima sexta possibilidade. Então, a data foi escolhida porque um byte comporta 256 possibilidades, indo de 0 à 255.

Uma dica simples para saber a soma de todos os bits: A soma de todos os bits da direita para a esquerda é igual o valor do próximo bit, somado a 1. Do mesmo modo, a soma de todos os bits anteriores, da direita para a esquerda, é igual ao valor do bit atual, subtraindo 1.

Resposta do Desafio Maker 07

E daí temos número par e impar. A única maneira de um valor numérico ser impar, é tendo o valor "1" no bit 0. Então quando foi sugerido o desafio, pensei nisso: Basta avaliar o bit 0; se for 0 é par, se for 1 é impar. Para avaliar bits, usamos bitwise, como já exemplificado em vários artigos, como o "bitwise com PCF8575".

Usando o código de exemplo do Desafio Maker 07, poderíamos adaptá-lo dessa forma:

#include <stdio.h>

int main(){
    char *parImpar[] = {"par","impar"};

    int x = 33;
    int i = x&(1<<0);
    printf("Result: %s\n",parImpar[i]);
    return 0;
}

Aqui está uma execução testando par e impar:

par-impar-resposta.jpg

Repare na imagem que editei o programa com o editor vi, então troquei apenas 32 para 33.

Gostou do Desafio Maker 07? Então compartilhe nas redes sociais e descubra se seu amigo conhece bitwise!

Inscreva-se no nosso canal Manual do Maker no YouTube.

Também estamos no Instagram.

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.