Código original, código inverso, código complemento: conceito, representação interna do computador, exemplos, regras de operação e conversão, motivos de uso

Por favor, dê uma olhada antes de ler: Eu sou uma pessoa que gosta de gravar. Cada vez que escrevo um blog, vou estudá-lo repetidamente e tentar o meu melhor para melhorar continuamente a qualidade do blog. O artigo está definido apenas para fãs, porque o blog realmente exigia muito esforço. Espero melhorar uns aos outros Obrigado! !


提示:以下是本篇文章正文内容

A maior parte do conteúdo deste artigo vem deste blog. Agradeço sinceramente ao blogueiro por compartilhar " https://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html "
e eu mesmo adicionei algum conteúdo. melhor entender.

1. Números de máquina e valores de verdade

Antes de aprender o código original, o código inverso e o código complementar, você precisa entender os conceitos de números de máquina e valores de verdade.

1.1, o número de máquinas

A representação binária de um número em um computador é chamada de número de máquina do número. O número da máquina é assinado e o bit mais alto de um número é usado para armazenar o sinal no computador, o número positivo é 0 e o número negativo é 1.

Por exemplo, o número +3 em decimal, o comprimento da palavra do computador é de 8 bits e convertido para binário é 00000011. Se for -3, é 10000011.

Então, 00000011 e 10000011 aqui são os números da máquina.

1.2, valor verdadeiro

Como o primeiro bit é o bit de sinal, o valor formal do número da máquina não é igual ao valor real. Por exemplo, no número assinado acima 10000011, o bit 1 mais alto representa negativo e seu valor real é -3 em vez do valor formal 131 (10000011 convertido em decimal é igual a 131).

Portanto, para fins de distinção, o valor real correspondente ao número da máquina com o bit assinado é chamado de valor real do número da máquina.

Exemplo: Valor verdadeiro de 0000 0001 = +000 0001 = +1, Valor verdadeiro de 1000 0001 = –000 0001 = –1


2. Conceitos básicos e métodos de cálculo de código original, código inverso e código complemento

Antes de explorar por que a máquina usa o código complementar, vamos primeiro entender o conceito de código original, código complementar e código complementar. Para um número, o computador deve usar um determinado método de codificação para armazenar. O código original, código complementar e código complementar são armazenamento de máquina Um método de codificação para um número específico.

2.1, o código original

O código original é o valor absoluto do bit de sinal mais o valor verdadeiro, ou seja, o primeiro bit é usado para representar o sinal, e os demais bits representam o valor. Por exemplo, se for binário de 8 bits:

[+1]= 0000 0001

[-1]= 1000 0001

O primeiro bit é o bit de sinal. Como o primeiro bit é o bit de sinal, o intervalo de valores do número binário de 8 bits é:

[1111 1111 , 0111 1111]

Agora mesmo:

[-127 , 127]

O código original é a representação mais fácil para o cérebro humano entender e calcular.

2.2 Código inverso

O método de representação do código inverso é:

O complemento de um número positivo é ele mesmo;

O código inverso de um número negativo é baseado no código original, o bit de sinal permanece inalterado e os demais bits são invertidos.

[+1] = [00000001]= [00000001]

[-1] = [10000001]= [11111110]

Pode-se ver que se um código negativo representa um número negativo, o cérebro humano não consegue ver intuitivamente o seu valor, normalmente ele deve ser convertido no código original antes do cálculo.

2.3 Código complementar

A notação de complemento de dois é:

O complemento de um número positivo é ele mesmo

O código complementar de um número negativo é baseado no código original, o bit de sinal permanece inalterado e os demais bits são invertidos e, finalmente, +1 (ou seja, +1 com base no código complementar)

[+1] = [00000001]= [00000001]= [00000001]

[-1] = [10000001]= [11111110]= [11111111]

Para números negativos, a representação do complemento de dois também é impossível para o cérebro humano ver intuitivamente o valor. Normalmente, ele também precisa ser convertido no código original para calcular seu valor.

Nota: No sistema do computador, todos os valores são expressos e armazenados em complemento de dois ! ! ! A razão é que, usando o código complementar, o bit de sinal e o campo de valor podem ser processados ​​uniformemente; ao mesmo tempo, a adição e a subtração também podem ser processadas uniformemente. Além disso, o código complementar e o código original são convertidos mutuamente, e o processo de operação é o mesmo, e nenhum circuito de hardware adicional é necessário. (Da Enciclopédia Baidu)

2.4. Comparação intuitiva dos três exemplos

Tome a computação de 32 bits como exemplo.

Comparação positiva:

123 的原码:00000000 00000000 00000000 01111011

123 的反码:00000000 00000000 00000000 01111011

123 的补码:00000000 00000000 00000000 01111011

Comparação negativa:

-123 的原码:10000000 00000000 00000000 01111011

-123 的反码:11111111 11111111 11111111 10000100

-123 的补码:11111111 11111111 11111111 10000101

2.5. Código complementar conhecido para encontrar o código original

Se o bit mais alto for 1 (número negativo), inverta tudo, exceto o bit mais alto, e adicione 1 para obter o código original (na verdade, é consistente com a regra de operação do código complementar do código original ).

Se o bit mais alto for 0 (número positivo), ele permanece inalterado e o complemento do número positivo é seu código original.

Por exemplo: Como é calculado 2-1?

计算公式:2-1=2+(-1)。计算机做减法会统一变成加法运算。
	2 的原码:00000010      -1 的原码:10000010
	2 的反码:00000010      -1 的反码:11111101
	2 的补码:00000010      -1 的补码:11111111
	
	用补码做运算:
       00000010
    +  11111111
    ————————————————
     0 00000001
     
结果 0 00000001,最高位溢出(0)丢弃, 2-1 = 1

3. Por que usar código original, código inverso e código complementar

Antes de iniciar um estudo aprofundado, minha sugestão de aprendizado é "memorizar" o código original acima, código inverso e representação de código complementar e método de cálculo.

Agora sabemos que o computador pode expressar um número de três formas de codificação. Para números positivos, os resultados dos três métodos de codificação são os mesmos:

[+1] = [00000001]= [00000001]= [00000001]

Portanto, não há necessidade de explicar muito. Mas para números negativos:

[-1] = [10000001]= [11111110]= [11111111]

Pode-se ver que o código original, o código inverso e o código complementar são completamente diferentes. Uma vez que o código original é reconhecido diretamente pelo cérebro humano e usado para calcular a representação, por que ainda existe código inverso e código complementar?

Em primeiro lugar, porque o cérebro humano pode saber que o primeiro bit é o bit de sinal, vamos escolher a adição e subtração da área de valor real de acordo com o bit de sinal ao calcular. (O conceito de valor verdadeiro está no início de este artigo). Mas para computadores, adição e subtração A multiplicação já é a operação mais básica e deve ser projetada da forma mais simples possível. A identificação do "bit de sinal" pelo computador obviamente tornará o projeto básico do circuito do computador muito complicado ! Então, as pessoas criaram um método para usar o bit de sinal para participar da operação. Sabemos , de acordo com o algoritmo, subtrair um número positivo é igual a adicionar um número negativo, ou seja: 1-1 = 1 + (- 1) = 0 , de modo que a máquina só pode adicionar, mas não subtrair, de modo que o design das operações do computador seja mais simples.

Assim, as pessoas começaram a explorar o método de usar o bit de sinal para participar da operação e reter apenas a adição. Primeiro, observe o código original:

Calcule a expressão decimal: 1-1=0

1 - 1 = 1 + (-1) = [00000001]+ [10000001]= [10000010]= -2

Se for representado pelo código original, e o bit de sinal também estiver envolvido no cálculo, obviamente para a subtração, o resultado está incorreto, por isso o computador não usa o código original para representar um número.

Para resolver o problema de subtrair o código original, existe um código inverso:

Calcule a expressão decimal: 1-1=0

1 - 1 = 1 + (-1) = [0000 0001]+ [1000 0001]= [0000 0001]+ [1111 1110]= [1111 1111]= [1000 0000]= -0

Descobriu-se que o valor verdadeiro do resultado está correto ao usar o complemento de alguém para calcular a subtração. O único problema é, na verdade, o valor especial "0". Embora as pessoas entendam que +0 e -0 são iguais, mas 0 tem um sinal Não tem significado. E haverá [0000 0000] original e [1000 0000] dois códigos originais para representar 0.

Assim, o surgimento do código complementar resolve o problema do sinal de 0 e duas codificações:

1-1 = 1 + (-1) = [0000 0001]+ [1000 0001]= [0000 0001]+ [1111 1111]= [0000 0000]=[0000 0000]

Desta forma, 0 é representado por [0000 0000], e o -0 que tinha problemas antes não existe, podendo ser representado por [1000 0000] -128:

(-1) + (-127) = [1000 0001]+ [1111 1111]= [1111 1111]+ [1000 0001]= [1000 0000]补 (-128没有原码和补码!!!)

O resultado de -1-127 deve ser -128. No resultado da operação de código de complemento, [1000 0000] complemento é -128. Mas observe que, como o código de complemento -0 anterior é realmente usado para representar -128, então- 128 não tem código original e representação de código inverso. (A representação do código complementar de -128 [1000 0000] complementa o código original é [0000 0000] código original, que está incorreto )

Usando o código complementar, não apenas corrige o sinal de 0 e o problema de duas codificações, mas também pode expressar um número mínimo. É por isso que o intervalo do binário de 8 bits, usando o código original ou o código inverso, é [-127, + 127], enquanto o intervalo representado pelo complemento de dois é [-128, 127].

Como a máquina usa código complementar, para o tipo int de 32 bits comumente usado na programação, o intervalo que pode ser representado é: [-231, 231-1] porque o primeiro bit representa o bit de sinal. E ao usar o código complementar representação, pode haver mais Salve um valor mínimo.


Palavras de código não são fáceis, obrigado por seus elogios! ! !
Palavras de código não são fáceis, obrigado por seus elogios! ! !
Palavras de código não são fáceis, obrigado por seus elogios! ! !

Supongo que te gusta

Origin blog.csdn.net/qq_40967086/article/details/128527271
Recomendado
Clasificación