|
| |||
|
|
Следующими налабал бинарные числа со знаком. Знак положил в младший бит, так называемое signed magnitude представление. Однако, заря компьютерной схемотехники, хотя там и в старшем бите было. Знак, вообще, как бы отдельно, но структур как бы ещё нету, поэтому в младший бит. Можно ещё в старший бит, но его как бы нету в бесконечной записи (списками). Хотя, забегая вперёд и думая об обратном коде, старшим битом можно считать "бит на бесконечности". В математике иногда используют скобки для периодичной компоненты, типа -13 = ⊤⊥⊤⊤(⊤). А в списке можно последний бит всегда считать бесконечно-периодичным. Проще всего вышло, как ни странно, умножение, - знак просто ксорится. Вычитание определил рекурсивно через сложение. А вот со сложением, объединённым с вычитанием, пришлось поскрипеть мозгами недельку. Пока не понял, что вычитание в столбик тупо не работает, когда вычитается большее из меньшего! И никак, однако, как кажется, не обобщить, чтоб один проход был. Нужно два прохода, хоть ты тресни, если не знать заранее, где большее число. Поэтому пришлось определить сравнение. И к слову, у него простое определение получается, только если выписывать функцию с тремя возможными (<, >, =) значениями, а не с булевым предикатом на > или <. А для сложения/вычитания сравнивать сначала слагаемые, и вычитать только меньшее из большего. В инете говорят, так машины на signed magnitude и работали. Сначала сравнение, обмен суммандов в регистрах, если надо, и сложение, собственно. Немного прочувствовал, в общем, как неуклюже такое решение с точки зрения машинной элегантности. И отчего от него отказались в пользу обратного когда (дополнений). Зато похоже на человеческую запись, и понятно, почему с signed magnitude и начали. Ну, да механические машины, вообще, на десятичной системе делали. |
|||||||||||||