Pergunta

Estou trabalhando no meu HW para arquitetura de computadores e me deparei com o seguinte problema:

A = 247
B = 237

1) Suponha que A e B sejam assinados por inteiros de 8 bits armazenados no formato do complemento de dois. Calcule A + B usando aritmética saturante. O resultado deve ser escrito em decimal. Mostre seu trabalho.
2) Suponha que A e B sejam assinados por números inteiros de 8 bits armazenados no formato Complemnt de dois. Calcule a - B usando aritmética saturante.

Agora, como essas perguntas são válidas? Eu sei o que é a aritmética saturante, mas como é válido dizer que A é 247 e B é 237 quando eles não podem ser representados pelo número de complemento de 8 bits dois?

Sei que o ponto da aritmética saturada está no caso de um transbordamento/subfluxo para definir todos os bits para o valor extremo, mas não faz sentido para mim fazer uma série de perguntas (há mais 3 com esse mesmo problema) envolvendo aritmética de números que não podem ser representados no formato que especificam.

Estou errado aqui?

Foi útil?

Solução

A única interpretação que faz sentido é que os valores dados são os não assinado interpretação do número em questão; Os valores maiores que 127 estão obviamente fora de alcance para um valor de complemento de dois bits de 8 bits. Concordo que a pergunta é mal declarada, no entanto.

Outras dicas

Eu não sei, mas isso poderia Esteja perguntando: "Converta o número decimal 237 em um número inteiro de 8 bits. Agora interprete esses bits como um número inteiro de 8 bits e adicione-os".

É como dizer, em c:

char a = 237;
printf("%x %d\n",a, a);

Que compila e fornece valores que você esperaria com base na interpretação do complemento do 2 do valor de 8 bits "237"

Parece errado para mim. Os números inteiros de complemento de 8 bits assinaram entre -128 e 127. Qualquer tentativa de atribuir uma constante 237 ou 247 a uma variável de complemento de 8 bits assinada deve resultar em um erro, dependendo do seu idioma.

Se o problema foi "suponha que A e B sejam armazenados em um número inteiro assinado de 8 bits", isso faria sentido. O armazenamento de A = 247 em um número inteiro de 8 bits assinado produz um valor de -9, armazenar B = 237 produz um valor de -19. Caso contrário, não faz sentido. Um número inteiro de 8 bits assinado não pode ter um valor de 247 ou 237.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top