Convertendo decimal negativo em binário

6

Eu tenho tentado converter o número -441 para binário, mas eu realmente não sei como posso fazer isso.

Primeiro converti 441 para binário, que é: 110111001 Então eu devo levar o elogio deste número que é: 001000110 E então eu teria que adicionar um que resultaria em: 001000111

O exercício diz que eu tenho que dar a representação binária em 10 bits e 16 bits, e então eu pensei em colocar um zero antes do número e é isso, mas depois de pesquisar eu descobri que sou deveria colocar um ONE antes do número, por que esse é o caso?

Como eu faria para converter -441 em um número de 16 bits?

Obrigado.

    
por Maxim 20.09.2015 / 20:01

2 respostas

16

Você está confuso porque esqueceu que deve haver algo que distingue os números positivos dos negativos.

Digamos que você queira armazenar números não negativos em 8 bits.

  • 00000000 é 0,
  • 00000001 é 1,
  • 00000010 é 2,
  • 00000011 é 3,
  • 00000100 é 4,
  • ...
  • 11111111 é 255

Assim, você pode armazenar números no intervalo 0-255 em 8 bits. 255 = 2 8 - 1. (2 é a base do sistema binário, 8 é o número de bits, 1 é subtraído porque queremos contar 0 em)

Agora, digamos que você queira armazenar números negativos também. Como podemos conseguir isso? Podemos dedicar um bit por sinal. Se este bit for 0 , interpretamos outros 7 bits como um número positivo, caso contrário, como um número negativo. É melhor usar o bit mais significativo para sinal porque facilita algumas operações.

  • Abordagem trivial: Basta ler um número como está:

    • 00000001 == 1 e 10000001 == -1
    • 01000010 == 66 e 11000010 == -66
    • 01111111 == 127 e 11111111 == -127
  • Complemento de Ones: Para qualquer número x , negar sua representação binária resulta em representação binária de -x . Isso significa que:

    • 00000001 == 1 e 11111110 == -1
    • 01000010 == 66 e 10111101 == -66
    • 01111111 == 127 e 10000000 == -127
  • Complemento de dois: Para qualquer número x , negar sua representação binária e adicionar 1 gera uma representação binária de -x . Isso significa que:

    • 00000001 == 1 e 11111111 == -1
    • 01000010 == 66 e 10111110 == -66
    • 01111111 == 127 e 1000001 == -127
    • 10000000 == -128

Por que dois complementam o melhor?

  • Porque tem o intervalo mais amplo: -128 ... 127, enquanto a abordagem trivial e o complemento de ones tem -127 ... 127
  • Zero está bem definido:
    • No complemento de dois apenas 00000000 é zero
    • Na abordagem trivial, tanto 00000000 como 10000000 são zero
    • No complemento de uns, 00000000 e 11111111 são zero
  • A adição e a subtração são idênticas às dos números não assinados, portanto, a CPU não precisa de instruções adicionais para adicionar números assinados.

Observe que, se dedicarmos o bit mais significativo ao bit de sinal, não poderemos converter o número em binário sem saber quantos bits serão necessários. Por exemplo, temos 4 bits, então o número -5 na abordagem trivial é 1101 , em 7 bits seria 1000101 . 0001101 (4-bit -5 preenchido com zeros até 7 bits) é na verdade 13 (o bit mais significativo é 0, então é positivo).

Eu não farei a lição de casa para você, mas posso dar dicas gerais:

Para converter -x em N bits em complemento de representação de dois:

  1. Converta -x em binário usando o complemento de dois.
  2. Tecla esquerda com zeros até N-1 length.
  3. Adicione o bit de sinal negativo no lado esquerdo.

Eu acho que você pode descobrir o resto dessa resposta. Se você tiver mais alguma dúvida, deixe um comentário.

    
por 20.09.2015 / 21:10
0

Bem, depois de receber o complemento de dois, você precisa adicionar um 0 no extremo do binário para torná-lo uma notação de 10 bits. A parte complicada é que você precisa colocar um bit assinado para mostrar que o binário é de um inteiro negativo, ou seja,        (1) 0001000111

    
por 09.04.2017 / 13:09

Tags