Показать сообщение отдельно
Старый 27.12.2011, 11:06   #4
YellowAfterlife
ПроЭктировщик
 
Аватар для YellowAfterlife
 
Регистрация: 19.02.2011
Сообщений: 134
Написано 81 полезных сообщений
(для 219 пользователей)
Ответ: base2 » base10(string)

Как я упомянул, преобразовать нужно не в двоичное число, а из двоичного. Результат хранится исключительно как строка для вывода на экран.
Сообщение от pax Посмотреть сообщение
А что ты получишь делением двоичного числа на 10? Тут как обычно возведение двойки в степень и сложение.
Принцип, в кратце (псевдокод):
function toString(number) {
    result = ""; // результат
    while (number != 0) {
        digit = number % 10; // цифра в конце числа
        result = chr(ord("0") + digit) + result; // записываем ее в результат
        number = number / 10; // переходим к следующей цифре
    }
    return result;
}
Суть в том что деление\модуль должны будут быть реализованы отдельно.
Сообщение от SBJoker Посмотреть сообщение
Классическое: "читаем биты справа налево, преобразуем каждую единицу в число по принципу 2^позиция бита. Прибавляем к итоговому числу. И так по всем битам числа." Не подходит?

Для чисел большой размерности надо прикручивать математику больших чисел на строках.
Подходит (и легко реализуется) для числа влезающего в стандартный формат, т.е. 32 бита, или немного больше для double (не могу сказать наверняка разрядность мантисы).
Строковая математика - неплохой вариант, хотя мне кажется что она будет работать по скорости не очень быстро. Думаю это можно немного исправить таблицей констант (2^n), но нужное количество итераций не очень радует.
__________________

Мой сайт-блог. Игры, обновления, примеры для Haxe, JavaScript(+HTML5), GameMaker, Love2d...
(Offline)
 
Ответить с цитированием