He estado tratando de recrear un restador completo binario a partir de un diagrama de circuito lógico, pero parece que no puedo obtener una salida que sea precisa. Lo reescribí de varias maneras y lo ejecuté sin un bucle y expresé la lógica de manera diferente. Mirando algunos ejemplos, realmente no veo qué está mal. La idea es obtener números de 2 n dígitos como entrada y enmascarar cada bit y luego realizar la lógica de resta. Tengo un sumador en funcionamiento que podría reutilizar invirtiendo el segundo valor, pero lo hago con fines educativos para familiarizarme con la lógica de las ALU.
class Alu { constructor(b = 8) { this.bits = b; } sub(y, z) { let m = 1; //mask let d = 0; //diff let b = 0; //borrow let w = 10; //base for (let i = 0; i < this.bits; i++) { let yM = y & m; let zM = z & m; d |= b ^ (yM ^ zM); b = (~yM & zM) | (~yM & b) | (~zM & b); m <<= 1; } console.log(y.toString(w)); console.log(z.toString(w)); console.log(d.toString(w)); } }Aquí están las imágenes de referencia que estoy usando: