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! !
Diretório de artigos
- 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! !
- 1. Números de máquina e valores de verdade
- 2. Conceitos básicos e métodos de cálculo de código original, código inverso e código complemento
- 3. Por que usar código original, código inverso e código complementar
提示:以下是本篇文章正文内容
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! ! !