Como 0 tem dois valores no complemento de alguém?

12

Diz-se que no complemento de 2 o 0 tem apenas um valor, enquanto no complemento de 1 ambos +0 e -0 têm valores separados. O que eles são?

user136782
fonte
8
0 não possui dois valores. Tem o valor 0. Período. O que ele tem no complemento 1 é duas representações . Mas isso não é realmente algo único. Por exemplo, o número 10 possui infinitas representações em decimal: 10, +10, 010, +010, 0010, +0010, ... e assim por diante.
Jörg W Mittag 04/04
Exatamente. Os valores são apenas classes de equivalência das representações, e o que é chamado de "o valor 0" passa a ser uma classe de equivalência contendo ambos 000...0e 111...1. Mas essas duas representações ainda representam apenas um único valor.
precisa saber é o seguinte

Respostas:

19

No complemento 1, você apenas inverte todos os bits.

Considere estes 2 exemplos (assumindo 8 bits):

  • - 4 = 111110114=00000100 , então4=11111011

  • - 0 = 111111110=00000000 , então .0=11111111

Então você tem 2 maneiras de representar o número 0

No complemento de 2, você adiciona 1 à representação do complemento de 1 do número negativo

  • 11111011 111111004 que no complemento de 1 era torna-se1111101111111100
  • 11111111 000000000 que no complemento de 1 era torna-se igual a 01111111100000000

Então você tem apenas uma maneira de representar o 0 neste caso

Como você pode ver nos exemplos, a diferença é que:

  • no complemento de 1, com 8 bits, você pode expressar números de a (de -127 a 127)2 7 - 127+1271
  • no complemento de 2 com 8 bits, você pode expressar números de a (de -128 a 127), então mais um número 2 7 - 127271
abc
fonte
7
Vale a pena mencionar que o complemento do 2 tem mais vantagens, além de apenas mais um número no intervalo, mesmo se você não entrar em detalhes sobre o que são.
KRyan
7
Também é possível mencionar uma das vantagens mencionadas nesta seção de comentários: Uma das principais vantagens é que a subtração (/ adição de números negativos) pode ser implementada apenas fingindo que os números não estão assinados e acrescentando-os. Não são necessários casos especiais para subtração = circuitos e lógica muito mais simples. Esta página possui uma boa descrição sobre esse tópico.
Jason C
3

No complemento de um, você nega um número invertendo todos os bits. Portanto, negando zero, produz , que representa , que é o mesmo que zero.1 1 - 000110

David Richerby
fonte
Alguns complementam ou subtraem trabalhos com transporte final. Obviamente, o que é exibido ao programador não precisa ser a representação subjacente.
TTW
1
@ttw A pergunta pergunta quais são as duas representações de zero, então não tenho certeza de onde adição, subtração e programadores entram nela.
David Richerby
3

Falar de dois valores diferentes de 0 no complemento de alguém é enganoso. O complemento de um (e o complemento de dois) são representações binárias de números. Eles descrevem uma maneira de representar números em binário e como executar operações aritméticas neles. O número representado pela sequência de bits é o valor.

Quando você tem algum valor em seu complemento e deseja encontrar a representação do valor com o sinal invertido - o inverso aditivo - você inverte cada bit. Isso inclui zero, então há uma representação para e uma representação para . Mas : inverter o sinal em não fornece um valor diferente, mas o mesmo valor.- 0 0 = - 0 0000=00

Isso fornece duas representações para em seu complemento: a sequência de bits e a sequência de bits .0 0 1 100011

Martijn
fonte