Mais que operador em lógica booleana (portas lógicas)
-
23-09-2019 - |
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?
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> =.