Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Алгоритмы > Вывод двоичного числа |
Автор: GePo 1.11.2003, 22:30 |
А как комп переводит двоичной число в десятичное строковое представление(то бишь есть 00010100, а он выводит, что 20). Врядли это делается "влоб". Немного конкретизирую вопрос - есть двоичное представление числа, пусть это будет массив байтов. Как из него получить десятеричное число в строке |
Автор: &-ray 2.11.2003, 14:42 | ||||
Здесь действует формула:
Т.е., если в бинарной системе число выглядит так 010101011 то в десятичной будет так:
|
Автор: neutrino 2.11.2003, 16:03 |
Самый простой и быстрый способ, это обьявить массив степеней 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]; } |
Автор: GePo 2.11.2003, 17:54 |
Не, это не то. Вывод и перевод все равно доверяется компу. А если у нас не 8, не 16, не 32 бита, а больше? пусть 256 бит. Как в этом случае? |
Автор: Elve 2.11.2003, 20:12 |
будет что-то типа того только не обращайте внимания если в синтаксисе будут ошибки я передаю идею 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 2.11.2003, 21:29 |
Кажется меня никто не понимает или кто понимает, не хочет(не знает) как ответить. Поясню на пальцах. Есть последовательность бит(сколько угодно много). Из неё как-то надо получить СТРОКУ, в которой будет десятичное число. Число заведомо не влезает ни в один тип данных. И лобовой метод длинного сложения и умножения мне не нравится(должен быть другой). |
Автор: neutrino 2.11.2003, 22:22 |
Ну так и называй веще своими именами. Если тебе нужна любая длина, то нужно пользоваться спец библиотеками для работы с длинными числами. Теперь, у тебя есть число в двоичной системе счисления: А алгоритм такой: 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 |