Analise o código C# exibido a seguir.using System; namespac...

Próximas questões
Com base no mesmo assunto
Q914403 Programação

Analise o código C# exibido a seguir.


using System;

namespace ErrorHandlingApplication {

class DivNumbers {

int result;

DivNumbers() {

result = 0;

}

public void division(int num1, int num2) {

try {

result = num1 / num2;

}

catch (SystemException e) {

Console.WriteLine

(e.ToString().Split(':')[0]);

} finally {

Console.WriteLine

("Resultado: {0}", result);

}

}

static void Main(string[] args) {

DivNumbers d = new DivNumbers();

d.division(24, 2 >> 1);

}

}

}


Assinale a opção que exibe o resultado da execução desse código.

Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Alternativa Correta: C - Resultado: 24

Para resolver esta questão, é necessário compreender como o código C# executa a divisão de números, como funciona o mecanismo de tratamento de exceções com try-catch-finally e a operação de shift à direita (>>) em C#.

No código dado, temos a classe DivNumbers que possui um método chamado division para dividir dois números inteiros. O tratamento de exceções é feito envolvendo o código que pode lançar uma exceção em um bloco try, seguido por um bloco catch que captura a exceção e finalmente um bloco finally que será executado independentemente do resultado da tentativa de divisão.

O interessante aqui é o uso do operador de deslocamento à direita (>>) no argumento que chama o método division. O número 2 >> 1 é uma operação de shift onde o número 2 (binário 10) é deslocado 1 bit para a direita, resultando no número 1 (binário 1). Portanto, a expressão d.division(24, 2 >> 1) efetivamente executa a operação d.division(24, 1).

Quando a divisão é realizada dentro do bloco try, num1 é 24 e num2 é 1, resultando em result sendo igual a 24, já que 24 dividido por 1 é 24. Não há exceção lançada, portanto, passamos diretamente para o bloco finally, que imprime o valor de result. Por isso, o resultado impresso é "Resultado: 24".

O bloco catch não é acionado porque não ocorreu uma exceção do tipo SystemException (ou qualquer outra exceção) durante a divisão. Se houvesse uma divisão por zero, por exemplo, uma System.DivideByZeroException seria lançada e o bloco catch capturaria essa exceção, mas neste caso específico, isso não acontece.

Portanto, a alternativa correta é de fato C, onde o resultado é 24, o que é consistente com o funcionamento esperado do código fornecido.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

A questão trata sobre deslocamento de bits à direita (>>). Como pode ser visto na expressão d.divison(24, 2 >> 1).

 

Traduzindo... Pegue o número 2(010 em binário) e desloque  1 bit a direita ( >> 1). Com isso teremos o número 001 em binário, ou seja, número 1 em decimal.

 

Com isso passamos para a função os valores num1= 24; e o num2=1;

Efetuando o calculo dentro do bloco try...

        result = num1 / num2; 

        result= 24/1

        result=24;

 

Resultado: 24;

GABARITO LETRA C

 

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo