Esta questão vem do NC-UFPR, Concurso da Itaipu para Engenharia Eletrônica em 2019.
Esta questão tinha erros de digitação nos valores das entradas dos sistemas, onde foi deixado a fonte das bases (16 e 8), que normalmente é subscrito, do mesmo tamanho que os valores. Por exemplo, o texto original era “SISTEMA A = 1AD16” em vez de “SISTEMA A = 1AD16”.
Questão
(Adaptada) 32 – Um algorítmo avalia valores obtidos de dois sistemas de aquisição, o SISTEMA A e o SISTEMA B. O SISTEMA A comunica-se com valores na base hexadecimal, e o SISTEMA B, na base octal. Os valores são capturados e multiplicados um pelo outro, na forma r = SISTEMA A * SISTEMAB, e o resultado da operação é nominado de r. O valor de r é então convertido em binário e armazenado em uma variável de 16 bits, aqui nominada de s. No caso de ocorrência de overflow (valor r >= 216), todos os 16 bits são marcados com 1, indicando uma leitura não válida. Acerca disso, considere as seguintes entradas:
- SISTEMA A = 1AD16 e SISTEMA B = 58
- SISTEMA A = 1F716 e SISTEMA B = 128
- SISTEMA A = AA116 e SISTEMA B = 148
Essas entradas geram, respectivamente, as seguintes sequências de s:
a) 0000100001100001 – 0001001110100110 – 0111111110001100.
b) 0000100001100011 – 1001101111110110 – 1111111111111111.
c) 1000000001000000 – 1111000000000000 – 1000000000000001.
d) 1010101010101001 – 1111111111111111 – 1111111111111111.
e) 0100101001100001 – 0101001111010110 – 0110111100001001.
Forma padrão de resolver
Em primeiro lugar podemos ver que não há respostas ambíguas para as duas primeiras entradas, ou seja, qualquer uma das duas que escolhermos nos dará a resposta correta. Para a terceira entrada aparece duas vezes a resposta 11…111.
Escolhemos a primeira entrada, convertemos os números para decimal e multiplicamos eles.
1AD16 = 1.1010.1101 = 256+128+32+8+4+1 = 429
58 = 5
429×5 = 2145
Agora basta converter o resultado para binário. Realizando a divisão sucessiva por dois obtemos o seguinte valor em binário a partir dos restos.
R Q 2145 1 1072 0 536 0 268 0 134 0 67 1 33 1 16 0 8 0 4 0 2 0 1 1 0
2145 = 1000011000012
Portanto, a alternativa correta é a) 0000100001100001 – 0001001110100110 – 0111111110001100.
Comentários:
- Realizar a conversão de hexadecimal para decimal é um tanto trabalhoso e fácil de errar.
- Realizar a divisão sucessiva por 2 para converter de decimal para binário é ainda mais trabalhoso e fácil de errar.
Forma rápida de resolver
Como estamos interessados no valor binário da multiplicação, vamos realizar a multiplicação diretamente em binário. Dessa forma não precisamos converter os valores para decimal e nem converter o resultado para binário.
Podemos escolher a primeira ou a segunda entrada, a que for mais conveniente. Como vamos ter que realizar multiplicação binária é melhor escolher o valor com menos bits 1.
Vejamos as entradas do SISTEMA B. Ambas têm dois bits 1.
58 = 0.1012 = 4 + 1 = 5 128 = 1.0102 = 8 + 2 = 10
Vejamos as entradas do SISTEMA A. A primeira entrada do sistema 1 tem menos bits 1.
1AD16 = 1.1010.11012 1F716 = 1.1111.01112
Então vamos realizar a multiplicação das primeiras entradas.
Como 1AD16 é maior que 5, construímos a multiplicação a partir da soma de potências de dois multiplicadas por 1AD16. Como 5 = 4+1 = 22+20, temos que 1AD16×5 = (1AD16×1 + 1AD16×4). Veja abaixo como montamos a multiplicação a partir dessa soma.
1AD × 5 1.1010.1101 × (4 + 1) 110101101 (1AD×1) + 11010110100 (1AD×4) -------------- 100001100001 (1AD×5)
Portanto, a alternativa correta é a) 0000100001100001 – 0001001110100110 – 0111111110001100.
Comentários:
- Esta solução pode parecer mais longa e complicada, mas boa parte dela é raciocínio.
- Não precisamos converter para tudo para decimal só para depois converter para binário.
- É muito mais rápido e confiável realizar a multiplicação diretamente em binário.
Mande seu problema e Compartilhe!
Como você resolveria este problema? Explique nos comentários!
Você tem um problema interessante? Envie para nós resolvermos! Veja como na página Problemas de Concursos.