![]() |
|
![]() ![]() ![]() |
|
GePo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 30.3.2003 Где: Москва Репутация: нет Всего: 3 |
А как комп переводит двоичной число в десятичное строковое представление(то бишь есть 00010100, а он выводит, что 20). Врядли это делается "влоб".
Немного конкретизирую вопрос - есть двоичное представление числа, пусть это будет массив байтов. Как из него получить десятеричное число в строке --------------------
|
|||
|
||||
&-ray |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 406 Регистрация: 15.4.2003 Где: Казахстан, г Аста на Репутация: нет Всего: нет |
Здесь действует формула:
Т.е., если в бинарной системе число выглядит так 010101011 то в десятичной будет так:
-------------------- "Совсем неважно от чего помрешь, ведь куда важнее - для чего родился..." С.Б. -------------------- И снова мышь беру я в руки Куда иду? - Конечно в сруки! |
||||
|
|||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Самый простой и быстрый способ, это обьявить массив степеней 2 и складывать в тех местах, где нужно.
int P={1,2,4,8,16,32, ... }, i=0, n=0; char A[]="111011010100111\n"; while (A[i]) { if (A[i]=='1') n+=P[i]; } -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
GePo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 30.3.2003 Где: Москва Репутация: нет Всего: 3 |
Не, это не то. Вывод и перевод все равно доверяется компу. А если у нас не 8, не 16, не 32 бита, а больше? пусть 256 бит. Как в этом случае?
--------------------
|
|||
|
||||
Elve |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 2.11.2003 Репутация: нет Всего: нет |
будет что-то типа того только не обращайте внимания если в синтаксисе будут ошибки я передаю идею
void main() { char A[]="00010100\n" int res=0; int n=1; for (int i=0;A[i]!="\n";i++) { res+=A[i]*n; n*=2; } } res=результат твоего поиска |
|||
|
||||
GePo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 30.3.2003 Где: Москва Репутация: нет Всего: 3 |
Кажется меня никто не понимает или кто понимает, не хочет(не знает) как ответить. Поясню на пальцах. Есть последовательность бит(сколько угодно много). Из неё как-то надо получить СТРОКУ, в которой будет десятичное число. Число заведомо не влезает ни в один тип данных. И лобовой метод длинного сложения и умножения мне не нравится(должен быть другой).
--------------------
|
|||
|
||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Ну так и называй веще своими именами.
Если тебе нужна любая длина, то нужно пользоваться спец библиотеками для работы с длинными числами. Теперь, у тебя есть число в двоичной системе счисления: А алгоритм такой: D=0; I=0; do { D+=(A&1)*pow2(I); I++; } while (A>>=1); Peremennaja D - десятичное число. Считай операторы сложения для него перегружены и работают. Вообще че за вопрос? Тебе явно ответили, что число представляется в н-ричной системе, как сумма его цифр умноженных на основание системы счисления в степени индекса. Все. что еще тебе надо?! А на счет того как компьютер делает: у него нет бесконечных чисел. Все ограничено 8-ю, 16-ю, 32-мя или 64-мя битами. Есть специальные инструкции процессора которые можно применить для преобразования в другую систему счисления. Вот как это делал мой калькулятор: dig db "0123456789ABCDEF" num db " " res db "- ", 13, 10, '$' bas db 2,8,10,16 sig dw 0 ... ... ... ; Converts number from AX to base, that specifyed by [bas]. Uses [sig] as sign c2base: xor dx, dx mov cx, 16 lea di, res+18 lea bx, dig std or [sig], 0 jz next neg ax next: div [si] push ax mov al, dl xlat stosb dec cx pop ax or ax, ax jnz next mov al, ' ' rep stosb sub di, [sig] mov dx, di mov ah, 09h int 21h ret -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |