Pergunta

Eu estou em um sistemas de computadores do curso e foram lutando , em parte, com Complemento de dois . Eu quero entender isso, mas tudo que li não trouxe a imagem junto para mim. Eu li o wikipedia artigo e vários outros artigos, incluindo meu livro texto

Por isso, eu queria começar este comunidade wiki post para definir o Complemento de Dois é, como usá-lo e como ele pode afetar números durante operações como moldes (a partir assinados para unsigned e vice-versa) , bit a bit operações e operações bit-shift.

O que eu estou esperando é uma definição clara e concisa que é facilmente compreendido por um programador.

Foi útil?

Solução

complemento de dois é uma maneira inteligente de armazenar números inteiros para que os problemas de matemática comuns são muito simples de implementar.

Para entender, você tem que pensar nos números em binário.

Ele basicamente diz:

  • para zero, usar todos os 0 do.
  • para inteiros positivos, comece a contar-se, com um máximo de 2 (número de bits - 1) -1
  • .
  • para inteiros negativos, fazer exatamente a mesma coisa, mas mudar o papel de 0 e 1 da (então ao invés de começar com 0000, comece com 1111 - que é o "complemento" parte)
  • .

Experimente-o com um mini-byte de 4 bits (vamos chamá-lo um mordidela -. 1/2 byte)

  • 0000 - de zero
  • 0001 - um
  • 0010 - dois
  • 0011 - três
  • 0100 para 0111 - 06:56

Isso é o mais longe que podemos ir em positivos. 2 3 -1 = 7.

Para negativos:

  • 1111 - um negativo
  • 1110 - negativo de dois
  • 1101 - negativo de três
  • 1100 para 1000 - negativo de quatro a oito negativo

Note que você obtenha um valor extra para negativos (1000 = -8) que não fazer para positivos. Isso ocorre porque 0000 é usado para zero. Isto pode ser considerado como Linha Número de computadores.

A distinção entre números positivos e negativos

Fazendo isso, o primeiro bit recebe o papel do bit "sinal", como ele pode ser usado para distinguir entre valores decimais positivos e negativos. Se o bit mais significativo é 1, em seguida, o binário pode ser considerado negativo, onde, como se o bit mais significativo (mais à esquerda) é 0, você pode dizer discernir o valor decimal é positivo.

números negativos "elogio que alguém é" apenas inverte o bit de sinal, então a contagem de 0. Mas esta abordagem tem de lidar com a interpretação 1000 como de "zero negativo", que é confuso. Você geralmente só tem que se preocupar com isso quando se trabalha perto do hardware.

Outras dicas

Gostaria de saber se isso poderia ser explicado melhor do que o artigo da Wikipedia.

O problema básico que você está tentando resolver com a representação de complemento de dois é o problema de armazenar números inteiros negativos.

Primeiro, considere um inteiro sem sinal armazenado em 4 bits. Você pode ter o seguinte

0000 = 0
0001 = 1
0010 = 2
...
1111 = 15

Estes não são assinados, porque não há nenhuma indicação de se tratar de negativo ou positivo.

Magnitude Entrar e excesso de notação

Para armazenar números negativos, você pode tentar uma série de coisas. Primeiro, você pode usar a notação de magnitude sinal que atribui o primeiro bit como um bit de sinal para representar +/- e os restantes bits para representar a magnitude. Então, usando 4 bits novamente e assumindo que 1 significa - e 0 significa + então você tem

0000 = +0
0001 = +1
0010 = +2
...
1000 = -0
1001 = -1
1111 = -7

Então, você vê o problema lá? Temos positivo e negativo 0. O problema maior é somar e subtrair números binários. Os circuitos de somar e subtrair usando magnitude sinal será muito complexa.

O que é

0010
1001 +
----

?

Outro sistema é notação excesso . Você pode armazenar números negativos, você se livrar do problema dois zeros, mas a adição ea subtração continua difícil.

Assim, vem ao longo complemento de dois. Agora você pode armazenar números inteiros positivos e negativos e realizar operações aritméticas com relativa facilidade. Há uma série de métodos para converter um número em complemento a dois. Aqui está um.

Converter Decimal para complementar de dois

  1. Converter o número de binário (ignorar o sinal por agora) por exemplo. 5 é 0101 e 0101 é -5

  2. Se o número é um número positivo, então você está feito. por exemplo. 5 é 0101 em binário usando complemento de dois notação.

  3. Se o número for negativo, então

    3.1 encontrar o complemento (invertido 0 e 1 do) por exemplo. -5 é 0101 assim que encontrar o complemento é 1010

    3.2 Add 1 ao complemento 1.010 + 1 = 1011. Portanto, -5 em complemento de dois é 1011.

Então, o que se queria fazer 2 + (-3) em binário? 2 + (-3) é -1. O que você tem que fazer se você estivesse usando magnitude sinal para adicionar esses números? 0010 + 1101 =?

Usando o complemento de dois considerar como seria fácil.

 2  =  0010
 -3 =  1101 +
 -------------
 -1 =  1111

Convertendo Complemento de Dois para Decimal

A conversão de 1111 para decimal:

  1. O número começa com 1, por isso é negativa, de modo que encontramos o complemento de 1111, que é 0000.

  2. Adicione 1 à 0000, e obtemos 0001.

  3. Converter 0001 a decimal, que é 1.

  4. Aplicar o sinal = -1.

Tada!

Como a maioria das explicações que eu vi, as que estão acima são claros sobre como trabalhar com complemento de 2, mas não realmente explicar o que eles são matematicamente. Vou tentar fazer isso, para inteiros, pelo menos, e eu vou cobrir algumas fundo que é provavelmente familiar em primeiro lugar.

Lembre-se de como ele funciona para decimal:
2345
é uma maneira de escrever
2 × 10 3 + 3 × 10 2 + 4 × 10 1 + 5 × 10 < sup> 0 .

Da mesma forma, binário é uma forma de escrever os números usando apenas 0 e 1 seguindo a mesma idéia geral, mas substituindo esses 10s acima, com 2s. Então, em binário,
1111
é uma maneira de escrever
1 × 2 3 + 1 × 2 2 + 1 × 2 1 + 1 × 2 0
e se você trabalhar com isso, que acaba por igual 15 (base 10). Isso porque ele é
8 + 4 + 2 + 1 = 15.

Esta é tudo muito bem para números positivos. Ele funciona até mesmo para números negativos se você estiver disposto a se ater apenas um sinal de menos na frente deles, como os humanos com números decimais. Isso pode ser feito até mesmo em computadores, mais ou menos, mas eu não vi esse computador desde o início da década de 1970. Vou deixar as razões para uma discussão diferente.

Para computadores que acaba por ser mais eficiente usar um complemento representação para números negativos. E algo aqui que é muitas vezes esquecido. notações de complemento envolvem algum tipo de inversão dos dígitos do número, até mesmo os zeros implícitas que vêm antes de um número positivo normal. Isso é estranho, porque a questão que surge é: todos eles? Isso poderia ser um número infinito de dígitos a serem considerados.

Felizmente, os computadores não representam infinitos. Números são limitados a um comprimento particular (ou largura, se você preferir). Então, vamos retorno a números binários positivos, mas com um tamanho particular. Vou usar 8 dígitos ( "bits") para estes exemplos. Assim, o nosso número binário seria realmente
00001111
ou
0 × 2 7 + 0 × 2 6 + 0 × 2 5 + 0 × 2 4 + 1 × 2 3 + 1 × 2 2 + 1 × 2 1 + 1 × 2 0

Para formar o 2 do negativo complemento, primeiro complementar toda a (binário) dígitos para formar
11110000
e adicionar 1 para formar
11110001
mas como devemos entender que isso significa -15?

A resposta é que podemos mudar o significado do bit de alta ordem (o mais à esquerda). Este bit será um 1 para todos os números negativos. A mudança será para mudar o sinal da sua contribuição para o valor do número que aparece no Então, agora nosso 11110001 é entendida para representar Restaurant -. 1 × 2 7 + 1 × 2 6 + 1 × 2 5 + 1 × 2 4 + 0 × 2 3 + 0 × 2 2 + 0 × 2 1 + 1 × 2 0
Observe que "-" na frente dessa expressão? Isso significa que o bit de sinal carrega o peso -2 7 , que é -128 (base 10). Todas as outras posições manter o mesmo peso que tinha em números binários não assinados.

Working a nossa -15, é
-128 + 64 + 32 + 16 + 1
Experimente-o em sua calculadora. é -15.

Das três formas principais que eu vi números negativos representados em computadores, 2 de complemento ganha mãos para baixo para a conveniência de uso geral. Ele tem uma esquisitice, no entanto. Desde que é binário, tem de haver um número par de combinações possíveis de bits. Cada número positivo pode ser emparelhado with seu negativo, mas há apenas um zero. Negando um zero você recebe zero. Portanto, não há mais uma combinação, o número com 1 no bit de sinal e 0 qualquer outro lugar. O número positivo correspondente não caberia no número de bits a ser utilizado.

O que é ainda mais estranho sobre este número é que se você tentar formar a sua positiva complementando e acrescentando um, você tem o mesmo número negativo de volta. Parece natural que o zero faria isso, mas isso é inesperado e não de todo o comportamento que estamos acostumados, porque os computadores de lado, geralmente pensamos de um suprimento ilimitado de dígitos, não esta de comprimento fixo aritmética.

Isto é como a ponta de um iceberg de esquisitices. Há mais à espreita abaixo da superfície, mas isso é o suficiente para esta discussão. Você provavelmente poderia encontrar mais se você pesquisar "overflow" para aritmética de ponto fixo. Se você realmente quer chegar a ele, você também pode pesquisar "aritmética modular".

2 do complemento é muito útil para encontrar o valor de um binário, no entanto eu pensei de uma forma muito mais concisa de resolver tal problema (nunca vi ninguém publicá-lo):

tomar um binário, por exemplo: 1101, que é [assumindo que o espaço "1" é o sinal] igual a -3 .

usando complemento de 2 de nós faria isso ... aleta 1101-0010 ... adicionar 0001 + 0010 ===> nos dá 0011. 0011 em binário positivo = 3. Portanto 1101 = -3 !

O que eu percebi:

em vez de toda a inversão e acrescentando, você pode apenas fazer o método básico para a resolução de um binário positivo (digamos 0101) é (2 3 * 0) + (2 2 * 1) + (2 1 * 0) + (2 0 * 1) = 5.

fazer exatamente o mesmo conceito com um negativo! (Com uma pequena torção)

levá 1101, por exemplo:

para o primeiro número em vez de 2 3 * 1 = 8 , fazer - (2 3 * 1) = - 8 .

, em seguida, continuar como habitual, fazendo -8 + (2 2 * 1) + (2 1 * 0) + (2 < sup> 0 * 1) = -3

Imagine que você tem um número finito de bits / Trits / dígitos / whatever. Você define 0, quando todos os dígitos sendo 0, e contar para cima naturalmente:

00
01
02
..

Eventualmente, você vai transbordar.

98
99
00

Temos dois dígitos e pode representar todos os números de 0 a 100. Todos esses números são positivos! Suponha que queremos representar números negativos também?

O que realmente temos é um ciclo. O número antes 2 é 1. O número antes de 1 é 0. O número antes 0 é ... 99 .

Assim, para simplificar, vamos dizer que qualquer número acima de 50 é negativo. "0" a "49" representam 0 a 49. "99" é -1, "98" está -2, ... "50" é de -50.

Esta representação é de dez complemento . Computadores normalmente usam de complemento de dois , que é o mesmo, exceto usando bits em vez de dígitos.

A coisa agradável sobre o complemento de dez é que a adição simplesmente funciona . Você não precisa fazer nada especial para adicionar números positivos e negativos!

Dois complemento é encontrado somando um ao complemento 1'st do número fornecido. Vamos dizer que nós temos que descobrir o complemento de dois de 10101 em seguida, encontrar o seu complemento para um, ou seja, 01010 add 1 para esse resultado, ou seja, 01010+1=01011, que é a resposta final.

Eu li uma explicação fantástica no Reddit por JNG, utilizando o odómetro como uma analogia.

 enter descrição da imagem aqui

É uma convenção útil. Os mesmos circuitos e operações lógicas que adicionar / subtrair números positivos no trabalho ainda binário tanto positiva e os números negativos se usando a convenção, é por isso que é tão útil e onipresente.

Imagine que o odômetro de um carro, que rola em torno de (digamos) 99999. Se você incremento 00000 você começa 00001. Se você diminuir 00000, você obtém 99999 (Devido ao rolo-around). Se você adicionar uma volta para 99999 ele vai voltar para 00000. Por isso, é útil para decidir que 99999 representa -1. Da mesma forma, é muito útil para decidir que representa 99998 -2, e assim por diante. Você tem para algum lugar de parada, e também por convenção, a metade superior dos números Consideram-se negativo (50000-99999), e a metade inferior positiva apenas ficar para si (00.000-49.999). Como resultado, a parte superior dígitos sendo 5-9 meio o número representado é negativo, e que seja 0-4 significa que o representado é positivo - exatamente o mesmo que o bit de topo representando sinal em número binário de complemento de dois.

Compreender isto foi difícil para mim também. Uma vez eu consegui e voltou a re-ler os artigos livros e explicações (não havia internet naquela época), descobriu-se um monte de aqueles descrevendo-o realmente não entende isso. Eu escrevi uma linguagem livro montagem de ensino depois que (que vendeu muito bem para 10 anos).

Permite obter a resposta 10-12 na forma binária utilizando 8 bits: O que realmente vai fazer é 10 + (-12)

Precisamos chegar a parte elogio de 12 a subtrair 10. 12 em binário é 00001100. 10 em binário é 00001010.

Para obter a parte elogio de 12 nós apenas reverter todos os bits em seguida, adicione 1. 12 em binário revertida é 11110011. Este é também o código Inverse (do complemento). Agora precisamos adicionar um, que agora é 11110100.

Assim 11110100 é o complemento de 12! Fácil quando você pensar desta forma.

Agora você pode resolver a questão acima de 10 -. 12 na forma binária

00001010
11110100
-----------------
11111110  

Olhando para sistema de complemento de dois de um ponto de vista matemático que realmente faz sentido. Em complemento de dez, a ideia é essencialmente 'isolar' a diferença.

Exemplo: 63-24 = x

Nós adicionar o complemento de 24 que é realmente apenas (100-24). Então, realmente, tudo que estamos fazendo é a adição de 100 em ambos os lados da equação.

Agora, a equação é:. 100 + 63-24 = x + 100, é por isso que remover o 100 (ou 10 ou 1000 ou qualquer outro)

Devido à situação inconveniente de ter que subtrair um número de uma longa cadeia de zeros, usamos um sistema de 'diminuição radix complemento', no sistema decimal, nove de complemento.

Quando são apresentados com um número subtraído de uma grande cadeia de noves, só precisamos de reverter os números.

Exemplo: 99999-03275 = 96724

Essa é a razão, depois de complemento de nove de, acrescentamos 1. Como você provavelmente sabe de matemática infância, 9 torna-se 10 por 'roubar' 1. Então, basicamente, é só dez do complemento que leva 1 a partir da diferença.

Em binário, complemento de dois é equatable para complemento de dez, enquanto um de complemento complemento nove de. A principal diferença é que em vez de tentar isolar a diferença com potências de dez (adição de 10, 100, etc. na equação) estamos tentando isolar a diferença com potências de dois.

É por esta razão que nós inverter os bits. Assim como como o nosso minuendo é uma cadeia de noves em decimal, o nosso minuendo é uma cadeia de uns em binário.

Exemplo: 111.111-101.001 = 010110

Como as cadeias de uns são 1 abaixo de um bom poder de dois, eles 'roubar' 1 a partir da diferença como nove de fazer em decimal.

Quando estamos usando negativo número binário de, realmente estamos apenas dizendo:

0000 - 0101 = x

1111 - 0101 = 1010

1111 + 0000-0101 = x + 1111

A fim de 'isolado' x, precisamos adicionar 1 porque 1111 é um longe de 10000 e nós removemos o líder 1 porque nós acabamos de adicionar-lo para a diferença originária.

1111 + 1 + 0000-0101 = x + 1111 + 1

10000 + 0000-0101 = x + 10000

Basta remover 10000 de ambos os lados para obter x, é álgebra básica.

Muitas das respostas até agora muito bem explicar por complemento de dois é usado para representar número negativo, mas não nos dizer o número de complemento de dois é, particularmente por que não um '1' é adicionado, e na verdade muitas vezes adicionados em um errada caminho.

A confusão vem de uma má compreensão da definição de um número de complemento. Um complemento é a parte que falta que faria algo completo.

O complemento de raiz de um número de n dígitos x na raiz b é, por definição, b ^ n-x. No sistema binário é 4 representam por 100, que tem 3 dígitos (n = 3) e uma base igual a 2 (b = 2). Portanto, o seu complemento de raiz é b ^ n-x = 2 ^ 3-4 = 04/08 = 4 (ou 100 em binário).

No entanto, em binário obtenção de complemento de uma raiz não é tão fácil como obter o seu complemento de raiz reduzido, que é definido como (b ^ n-1) -y, apenas a 1 menor do que o complemento de raiz. Para obter um complemento de raiz reduzido, você simplesmente virar todos os dígitos.

100 -> 011 (diminuída (one) radix complemento)

para obter a raiz (dois de) complemento, nós simplesmente adicionar 1, como a definição definido.

011 +1 -.> 100 (complemento de dois)

Agora, com esse novo entendimento, vamos dar uma olhada do exemplo dado por Vincent Ramdhanie (veja acima segunda resposta)

/ * começar de Vincent

A conversão de 1111 para decimal:

O número começa com 1, por isso é negativo, então encontramos o complemento de 1111, que é 0000. Adicione 1 à 0000, e obtemos 0001. Converso 0001 a decimal, que é 1. Aplicar o sinal = -1. Tada!

final de Vincent * /

Deve ser entendido como

O número começa com 1, por isso é negativo. Então, nós sabemos que é complemento de algum valor x a dois. Para encontrar o x representado por complementar o seu dois, primeiro precisamos encontrar o seu complemento de 1.

complemento de x dois de: 1111 complemento de um dos x: 1111-1 -> 1110; x = 0001, (flip todos os dígitos)

aplicar o sinal -, ea resposta = -x = -1.

Eu gostava resposta de lavinio, mas mudando pedaços acrescenta alguma complexidade. Muitas vezes, há uma escolha de bits movendo respeitando o bit de sinal ou ao não respeitar o bit de sinal. Esta é a escolha entre tratar os números como assinado (-8 a 7, para uma mordidela, -128 a 127 bytes) ou de gama completa números sem sinal (0 a 15 para aperitivos, 0 a 255 para bytes).

é um meio inteligente de codificando inteiros negativos de tal forma que cerca de metade da combinação de bits de um tipo de dados está reservada para inteiros negativos, e a adição de mais dos números inteiros negativos com o seu correspondente inteiros resultados positivos em um estouro de transporte que deixa o resultado seja zero binário.

Assim, em complemento de dois, se uma é 0x0001 0x1111 é então -1, porque isso irá resultar em uma soma combinado de 0x0000 (com um excesso de 1).

2 de Complementos: Quando adicionar um extra com complementos de um número do 1 do teremos a 2 de complementos. Por exemplo: 100101 é um complemento da é de 011010 e 011010 2 complemento é + 1 = 011,011 (por adição de um com um complemento de) Para mais informações este artigo explicá-la graficamente.

Eu tive o mesmo problema um par de semanas atrás. Acabei de ler sobre ele on-line a partir de várias fontes, tentando juntar as peças e escrever sobre ele próprio só para ter certeza que eu entendi corretamente. Usamos complemento de dois para duas razões principais:

  1. Para evitar múltiplas representações de 0
  2. Para evitar manter o controle de carry bit (como no complemento de um) em caso de transbordamento.
  3. A realização de operações simples, como adição e subtração torna-se fácil.

Se você quer uma explicação mais detalhada sobre o assunto em questão, tente o artigo escrito por mim aqui . Espero que ajude!

Os deriva do complemento palavra de completude. No mundo da decimal os algarismos de 0 a 9 fornecer um complemento (conjunto completo) de números ou símbolos numéricos para expressar todos os números decimais. No mundo binário os números 0 e 1 fornecem um complemento de numerais para expressar todos os números binários. Na verdade, os símbolos 0 e 1 deve ser utilizado para representar tudo (texto, imagens, etc), bem como positivo (0) e negativo (1). Em nosso mundo o espaço em branco à esquerda do número é considerado como zero:

                  35=035=000000035.

Em um local de armazenamento de computador não existe nenhum espaço em branco. Todos os bits (dígitos binários) deve ser 0 ou 1. Para usar eficientemente números de memória podem ser armazenados como 8 bits, 16 bits, 32 bits, 64 bits, 128 bits representações. Quando um número que é armazenado como um número de 8 bit é transferido para um local de 16 bits o sinal e magnitude (valor absoluto) deve permanecer a mesma. Ambos 1 do complemento e 2 de representações do complemento facilitar este processo. Como um substantivo: Ambos 1 do complemento e 2 do complemento são representações binárias de quantidades assinados onde o bit significativo mais (o da esquerda) é o bit de sinal. 0 é para positivo e um negativo é para. 2s complemento não negativo média . Isso significa uma quantidade assinado. Como em decimal a magnitude é representada como a quantidade positiva. A estrutura usa extensão de sinal para preservar a quantidade quando a promoção de um registo [] com mais bits:

       [0101]=[00101]=[00000000000101]=5 (base 10)
       [1011]=[11011]=[11111111111011]=-5(base 10)

Como um verbo: 2 de meios de complemento para negar . Isso não significa make negativo. Isso significa que se negativo make positivo; se positivo make negativo. A magnitude é o valor absoluto:

        if a >= 0 then |a| = a
        if a < 0 then |a| = -a = 2scomplement of a

Esta capacidade permite a subtração binária eficiente usando negate em seguida, adicionar. a - b = a + (-b)

A forma oficial para tomar complemento de 1 é para cada dígito subtrair o seu valor a partir de 1.

        1'scomp(0101) = 1010.

Este é o mesmo que virar ou inverter cada bit individualmente. Isso resulta em um negativo zero, o que não é bem amado assim que adicionar um para te complemento de 1 se livrar do problema. Para negar ou tomar as 2s complementar primeiro tomar as 1s complementar em seguida, adicione 1.

        Example 1                             Example 2
         0101  --original number              1101
         1's comp  1010                       0010
         add 1     0001                       0001
         2's comp  1011  --negated number     0011

Nos exemplos a negação funciona tão bem com números sinal estendido.

Adicionando:
1110 Carry 111110 Carry 0110 é o mesmo que 000110 1111 111111 soma 0101 soma 000.101

subtraindo:

    1110  Carry                      00000   Carry
     0110          is the same as     00110
    -0111                            +11001
  ----------                        ----------
sum  0101                       sum   11111

Observe que quando se trabalha com complemento de 2, o espaço em branco à esquerda do número é preenchido com zeros para números positivos Butis preenchido com aqueles para os números negativos. A transição é sempre adicionado e deve ser um 1 ou 0.

Felicidades

REFERÊNCIA: https: //www.cs.cornell. edu / ~ tomf / notas / cps104 / twoscomp.html

I invertido todos os bits e adicionar 1. programaticamente:

  // in C++11
  int _powers[] = {
      1,
      2,
      4,
      8,
      16,
      32,
      64,
      128
  };

  int value=3;
  int n_bits=4;
  int twos_complement = (value ^ ( _powers[n_bits]-1)) + 1;

complemento de um determinado número 2 do é o não. tem adicionando 1 com o complemento do sem a 1 de. suponho, nós temos um não binário .: 10111001101 complemento é 1 é: 01000110010 E é complemento para 2 será: 01000110011

Para complemento bit a bit um número é inverter todos os bits na mesma. Para dois de complementá-lo, jogarmos todos os bits e adicionar um.

Usando representação do complemento de 2 para inteiros assinados, aplicamos operação de complemento de 2 de converter um número positivo para o seu equivalente negativo e vice-versa. Assim, usando um exemplo para aperitivos, 0001 (1) torna-se 1111 (-1) e aplicando o op novamente, retorna ao 0001.

O comportamento da operação em zero é vantajoso em dar uma representação única para zero, sem um tratamento especial de zeros positivos e negativos. complementos 0000 para 1111, que quando um é adicionado. transborda para 0000, dando-nos um zero, em vez de um positivo e um negativo.

Uma das principais vantagens desta representação é que os circuitos de adição de padrão para inteiros sem sinal produzem resultados corretos quando aplicado a eles. Por exemplo, adicionando 1 e -1 em mordidelas: 0001 + 1111, os bits de transbordar para fora do registo, deixando para trás 0000.

Para uma introdução suave, a maravilhosa Computerphile produziram um href="https://www.youtube.com/watch?v=lKTsv6iVxV4" rel="nofollow noreferrer"> vídeo .

2 do complemento é essencialmente uma forma de chegar com o inverso aditivo de um número binário. Pergunte-se: Dado um número no formato binário, o que mordeu padrão, quando adicionado ao número original, faria o resultado de zero? Se você pode chegar a este padrão de bits, então, que o padrão de bits é a representação ve (inverso aditivo) do número original; como, por definição, a adição de um número à sua inversa aditivo deve sempre resultar em zero. Exemplo: tomar 101, que é decimal 5. Agora a tarefa é chegar a um padrão de bits que, quando adicionado ao padrão de bits dada (101) resultaria em zero. Para fazer isso, iniciar a partir da direita bit mais de 101 e para cada bit individual, novamente a mesma pergunta: O que pouco Devo acrescentar que "este" bit para fazer o resultado de zero? continuar fazendo isso levando em conta o transporte habitual over. Depois que é feito com os 3 a maioria dos lugares certos (os dígitos que definem o número original sem levar em conta os zeros à esquerda) o último carry vai para o padrão do aditivo inversa bit. Além disso, uma vez que poderia estar segurando no número original em dizer um único byte, todos os outros bits líderes no aditivo inversa também deve ser 1 de modo que quando o computador adiciona o número e seu aditivo inversa usando "que" tipo de armazenamento (char) o resultado em que caractere seria todos os zeros.

 1 1 1
 ----------
   1 0 1
 1 0 1 1 ---> additive inverse
  ---------
   0 0 0

A resposta mais simples:

1,111 + 1 = (1) 0000. Então 1.111 deve ser -1. Em seguida, -1 + 1 = 0.

É perfeito para entender estes todos para mim.

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