¿Cómo convertir números binarios de punto fijo a BCD? [duplicar]

0

Estoy tratando de hacer una calculadora que pueda hacer cálculos de puntos fijos, pero no sé cómo mostrarlos en decimal (BCD). La gente me ha dicho que use el dable doble inverso, pero estoy buscando otra solución. ¿Cómo puedo convertir números binarios de punto fijo a BCD sin utilizar doble dable inversa? La ayuda es muy apreciada.

    
pregunta Konrad Zuse

1 respuesta

0

¿Por dónde empezar? Asumiré que tiene la intención de hacer cálculos de CPU, no intentar hacerlo con puertas.

  • usa bcd maths en primer lugar. Eso es lo que hicieron las calculadoras. Binario NO puede dar decimales correctos si quieres hacer eso.
  • haga que el núcleo matemático sea conmutable, es decir, puede cambiar * + entre bcd / binary. Esto es bastante fácil: a expensas de algunos ciclos adicionales, puede usar / no usar el ajuste decimal en cada paso.

No has declarado lo que realmente quieres.  - BCD empaquetado - bytes múltiples de 2 dígitos por byte  - bcd único - 1 dígito por byte, por ejemplo, para escribir ascii, convertir a 7seg, etc.

Quiero los últimos dígitos: puedo escribirlos en la pantalla o en el terminal, así que lo hago dígito a dígito. Esto me permite insertar puntos decimales en la pantalla donde quiero, a medida que los imprimo.

Uso una rutina que resta una constante k (por ejemplo, 100) desde N hasta cero. Entonces tengo ese dígito, y puedo emitirlo.

while (N>0) { 
  N=N+k; //constant is negative so + is actually subtract
  Digit:=Digit+1;
}

Repita para cada dígito, colocando el decimal fijo donde lo desee, por ejemplo. 25.1

push N
-10000 Add2Zero PrintDigit
-1000  Add2Zero PrintDigit
-100 Add2Zero PrintDigit
PrintDecimalPoint 
-10 Add2Zero PrintDigit
PrintDigit

Observará que esto está usando una pila y es de estilo RPN (notación de pulido inverso). Si está implementando una calculadora, esta es una manera mucho más eficiente de hacer sus cálculos. Solo tiene que implementar una pila pequeña y las funciones básicas en C y luego llamarlas en orden, como RPN o la programación de pulsaciones de la calculadora.

Una pila pequeña (3-4 números es suficiente) y uno o dos registros de almacenamiento, y un par de funciones (push, dup, roll) permiten realizar muchos cálculos complejos. Tenga en cuenta que las únicas funciones matemáticas que realmente necesita son * + y negar. Para una gran cantidad de (16 bits), la resta sucesiva está bien para la división.

Las calculadoras utilizaron muchos algoritmos de bucle ineficientes ya que tienen 1 segundo para hacer cada cálculo.

Si estás haciendo una calculadora, mira lo que hace Sinclair Scientific y maravilla.

    
respondido por el Henry Crun

Lea otras preguntas en las etiquetas