Pergunta

Basicamente, tenho 2 números binários não assinados de 8 bits e preciso usar a lógica booleana para descobrir qual é maior e não consigo descobrir por onde começar.Usando portas lógicas...

Obviamente tenho que analisar cada pedaço e descobrir qual é maior, mas como faço para juntar tudo?

Digamos que eu tivesse xey e quisesse retornar verdadeiro se x <y (xey são números binários não assinados de 8 bits).Como eu faria isso?

Pensei em descobrir qual tem a parte mais significativa, mas e se os dois forem iguais?

Alguém tem alguma ideia?

Foi útil?

Solução

Pensei em descobrir qual tem a parte mais significativa, mas e se os dois forem iguais?

Você prossegue do "bit mais significativo" até o "bit menos significativo" até que haja uma diferença.O número com o primeiro bit definido como “1” é o maior.

Para implementar isso, use um “registro de deslocamento” para cada número e um comparador para os bits “fora” do SR.

Outras dicas

Você está parcialmente lá. Sim, comece da parte mais significativa. Se ambos forem iguais, vá para o próximo bit (movendo-se para a direita, em direção à parte mais significativa). Quando você encontra um pouco definido (e o outro não é), esse é o número maior.

Na verdade, você está no caminho certo. Primeiro compare o bit mais significativo. Se eles não forem iguais, você já poderá gerar o resultado, de uma maneira ou de outra. Se eles forem iguais, então você apenas produz o resultado de comparar o segundo Bit mais significativo. E assim por diante até o bit menos significativo. Recursão de certa forma. No resultado, você terá a mesma configuração de portões repetidos para cada bit, exceto o último que terá uma pequena variação (porque não há mais um pouco depois disso).

Se a parte alta de um é "maior" (ou seja: é 1 e o outro é 0), então o número é o maior.

Se eles forem iguais, execute o mesmo teste no próximo bit.

Então você quer algo como este pseudo-código do tipo C (fingindo que temos os bits nas matrizes com a mais significativa na posição 0):

// true iff x > y
(x[0] == 1 && y[0] == 0) 
|| (
  (y[0] == x[0]) 
  && (the entire expression all over again, but with [n+1] instead of [n])
)

Para o seu caso base (ou seja: quando não houver mais bits para testar), use False ou True, dependendo se você deseja> ou> =.

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