¿Qué número binario de 4 bits es mayor?

Mi tarea

Estoy trabajando en una pregunta de trabajo extra que nuestro maestro nos asignó del libro. Diseñe un circuito combinatorio que compare dos números sin signo de 4 bits A y B para ver si B es mayor que A. El circuito tiene una salida X, de modo que X = 1 si A < B y X = 0 si A = B o A > B.

Mis ideas

Tenía 2 ideas, pero ninguna es muy buena. 1 era obtener la versión en complemento de 2 de A (positivo) y B (negativo). Luego podría sumarlos y si tuviéramos un negativo, sería obvio que B es mayor que A. El bit inicial sería 1, por lo que simplemente negaría el bit inicial y haría que ese fuera mi resultado. De lo contrario, generaría 1. Esto es casi una solución, pero no creo que funcione si tuviéramos A = B porque entonces el bit inicial sería 0 pero tendríamos una salida de 1 que indicaría A>B cuando de hecho A = B.

Mi segunda idea fue dividir cada número en 4 bits, comparar los bits de cada número y averiguarlo de esa manera. Sin embargo, esto requeriría una tabla de verdad de 256 filas, y preferiría simplemente no responder la pregunta que escribirla.

Ninguno de mis enfoques realmente parece factible (ni siquiera siento que logren la tarea). ¿Alguien puede sugerir una pista sobre cuál sería un buen enfoque o idea para realizar esta tarea? (No busco una solución completa, solo algo para comenzar)

Su tabla de verdad tendrá mucho menos de 256 filas reales, ya que solo 1 de cada 4 condiciones puede ser verdadera.
@IgnacioVazquez-Abrams como en, solo es cierto cuando A = 1 y B = 0, de lo contrario tenemos A = B o A <B. Sin embargo, eso todavía me dejaría con una tabla de verdad de 64 filas.
Cuento 12 filas. Los bits menos significativos no importan, los bits más significativos determinan el resultado.
@IgnacioVazquez-Abrams Estoy un poco confundido por esa declaración, el LSB a veces determina cuál es mayor como 0000 vs 0001
Pero nunca con 0b1000 frente a 0b0000 hasta 0b0111.
Entonces, hay rangos en los que el MSB puede decirnos qué valor es mayor. Y no tengo que preocuparme por el valor de los otros bits (se convierten en entradas que no importan). Pero, ¿cómo encontraría todos estos rangos?
Al pensar en ello. 1s hacia el MSB significa que puede ignorar todos los bits menores.
Si desea comparar su respuesta con un resultado optimizado, puede consultar el diagrama interno de los circuitos integrados diseñados para este propósito (p. ej., 74HCxx). No creo que esto viole el espíritu de no hacer la tarea para el OP, ya que todavía tienen que mostrar el trabajo para obtener el resultado.
@SpehroPefhany gracias por la sugerencia, pero no estoy muy seguro de qué es un IC
Circuito integrado. Busque 74HC85 cuando tenga su respuesta.

Respuestas (2)

Si desea encontrar el número más grande entre dos números sin signo A y B, todo lo que necesita mirar es el bit más significativo donde los bits en A y B no son iguales, el número más grande es el número que tendrá un ' 1' en ese punto y el número más pequeño será el número que tendrá un '0' en ese punto. por ejemplo, si

A = 1100 B = 1011

entonces A es más grande que B porque en el bit más significativo donde los números de bit no son los mismos (índice de bit 2 en este caso) A es 1 y B es 0.

Entonces, para resolver este problema, podemos comenzar definiendo una variable X i , donde X i es alta si i) los bits de A y B en el índice de bits actual no son iguales, ii) todos los bits de A y B han sido iguales en todos los índices mayores que el índice actual y iii) el bit de valor de B en el índice actual, B i , es alto. Usando esta lógica podemos extraer los valores de X i = {X 3 X 2 X 1 X 0 } como ser

X 3 = B 3 ( A 3 B 3 ) X 2 = B 2 ( A 2 B 2 ) . ( A 3 B 3 ) ¯ X 1 = B 1 ( A 1 B 1 ) . ( A 2 B 2 ) ¯ . ( A 3 B 3 ) ¯ X 0 = B 0 ( A 0 B 0 ) . ( A 1 B 1 ) ¯ . ( A 2 B 2 ) ¯ . ( A 3 B 3 ) ¯

entonces podemos obtener nuestro resultado final X como

X = X 3 + X 2 + X 1 + X 0

Lo que terminé haciendo fue decir que tenemos tres posibilidades: A<B,A>B,A=B. Hizo una tabla de verdad y un mapa K para esas tres posibilidades y las redujo a f = A>B. Terminé solo necesitando un circuito para determinar la igualdad y un circuito para determinar si A> B (Necesitamos el circuito de igualdad para determinar A> B).

En realidad, en algunas aplicaciones, la idea de la tabla de búsqueda sería cómo se hace. Utiliza una buena cantidad de memoria de solo lectura para realizar la tarea, pero tiene la ventaja de que todas las soluciones se encuentran dentro de un solo ciclo de lectura.

Tiene razón en que esta tabla de búsqueda tendría 256 entradas. Tienes un total de 8 bits en los que cada uno puede tener cualquier valor. 2 8 = 256.

Otra forma de pensar en este problema es averiguar lo que necesitaría saber en cualquier posición de un bit para decidir la respuesta. Suponga que sabe si los dígitos de orden superior son mayores que, menores que o iguales. En el caso de mayor que o menor que, los dígitos a su izquierda ya han determinado el resultado. En el caso de igual a, su bit determinará el resultado si son diferentes.

Ahora cree la lógica que toma los tres estados posibles de los bits superiores, los dos bits que tiene que comparar, y produce los tres estados posibles para pasar a la misma lógica para el siguiente bit inferior. Debería poder construir un circuito lógico utilizando este método que funcione en números arbitrariamente grandes, con el tiempo para encontrar la solución proporcional a la cantidad de bits en los números. También tenga en cuenta que el bit superior es un caso especial. Puede pensar en ello como sabiendo implícitamente que todos los bits a la izquierda son iguales.