Manual
do
Maker
.
com
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):
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.
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:
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.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.