SóProvas


ID
1347019
Banca
FGV
Órgão
TJ-GO
Ano
2014
Provas
Disciplina
Programação
Assuntos

A função XOR a seguir, codificada na linguagem de programação C, calcula um byte de verificação para um dado pacote de tam bytes:


                      typedef unsigned char uchar;

                      uchar XOR (uchar pacote[ ], int tam)
                      { 
                          int i;    
                          uchar b = 0; 

                          for (i = 0; i < tam; i++) 
                              b = b ^ pacote[i]; /* ^ é OU EXCLUSIVO */ 

                          return b;
                      }



Um pacote de dois bytes, sendo o primeiro deles 2F (em hexadecimal), é submetido à função XOR, que produz o byte FF como resultado. Logo, o segundo byte do pacote é:

Alternativas
Comentários
  • Alguém entendeu a lógica da questão?

  • Não tenho ideia

  • Por engenharia reversa, meu raciocínio foi o seguinte:
    XOR tabela verdade
    0 0 - 0

    0 1 - 1

    1 0 - 1

    1 1 - 0

    Logo, 2F X ?? => FF 
    2F: 0010 1111 X ?? = 1111 1111
    Para que o resultado fosse FF, o ??, utilizando a tabela verdade XOR( resultado =1 se números forem diferentes), teria que utilizar algum byte que tivesse todos os bits diferentes do 2F:
    0010 1111 2F

    1101 0000 D0

    Logo 2F x D0 = FF

  • 2F => DECIMAL  => 47

    FF => DECIMAL => 255 

    Diante disso subtraimos o resultado gerado pelo valor do primeiro pacote:

    255 - 47 = 208 => HEXADECIMAL => D0

  • Essa questão não tem pé nem cabeça. A questão é omissa em dizer qual é o conteúdo do segundo byte do argumento pacote[ ], daí, poderia sair qualquer coisa!!!