Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет superhuman ([info]superhuman)
@ 2017-04-21 22:53:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Следующими налабал бинарные числа со знаком. Знак положил в младший бит, так называемое signed magnitude представление. Однако, заря компьютерной схемотехники, хотя там и в старшем бите было. Знак, вообще, как бы отдельно, но структур как бы ещё нету, поэтому в младший бит.

Можно ещё в старший бит, но его как бы нету в бесконечной записи (списками). Хотя, забегая вперёд и думая об обратном коде, старшим битом можно считать "бит на бесконечности". В математике иногда используют скобки для периодичной компоненты, типа -13 = ⊤⊥⊤⊤(⊤). А в списке можно последний бит всегда считать бесконечно-периодичным.

Проще всего вышло, как ни странно, умножение, - знак просто ксорится. Вычитание определил рекурсивно через сложение. А вот со сложением, объединённым с вычитанием, пришлось поскрипеть мозгами недельку. Пока не понял, что вычитание в столбик тупо не работает, когда вычитается большее из меньшего! И никак, однако, как кажется, не обобщить, чтоб один проход был. Нужно два прохода, хоть ты тресни, если не знать заранее, где большее число.

Поэтому пришлось определить сравнение. И к слову, у него простое определение получается, только если выписывать функцию с тремя возможными (<, >, =) значениями, а не с булевым предикатом на > или <. А для сложения/вычитания сравнивать сначала слагаемые, и вычитать только меньшее из большего.

В инете говорят, так машины на signed magnitude и работали. Сначала сравнение, обмен суммандов в регистрах, если надо, и сложение, собственно. Немного прочувствовал, в общем, как неуклюже такое решение с точки зрения машинной элегантности. И отчего от него отказались в пользу обратного когда (дополнений). Зато похоже на человеческую запись, и понятно, почему с signed magnitude и начали. Ну, да механические машины, вообще, на десятичной системе делали.