В настоящее время я работаю с Nand2tetris для университетского курса, и это в основном просто. Но алюминий может делать вычитание за один шаг, и я совершенно не понимаю, как это работает.
opMinus = addition <> notX <> notOut
Я не мог найти никакого объяснения этому в Интернете. И последний шаг, когда я пытаюсь вывести это сам, выглядит ерундой, хотя quickcheck говорит, что это правильно:
a - b
a + !b + 1 -- 2s complement
!!(a + !b + 1) -- double negation
!(!a + b) -- apparently this is correct and i have no clue why
Последний шаг кажется основанным на чем-то вроде
!(a+b) == !a + !b + 1
но у меня нет интуиции, почему это работает, поэтому объяснение было бы очень признательно. Спасибо за чтение!