Вывод двоичного числа

 
0
 
Алгоритмы
ava
GePo | 01.11.2003, 22:30
А как комп переводит двоичной число в десятичное строковое представление(то бишь есть 00010100, а он выводит, что 20). Врядли это делается "влоб".
Немного конкретизирую вопрос - есть двоичное представление числа, пусть это будет массив байтов. Как из него получить десятеричное число в строке
Ответы (6)
ava
&-ray | 02.11.2003, 14:42 #
Здесь действует формула:

Разряд1*2^0+Разряд2*2^1+Разряд3*2^2+...


Т.е., если в бинарной системе число выглядит так 010101011
то в десятичной будет так:

1*2^0+1*2^1+0*2^2+...+0*2^8
ava
neutrino | 02.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];
}
ava
GePo | 02.11.2003, 17:54 #
Не, это не то. Вывод и перевод все равно доверяется компу. А если у нас не 8, не 16, не 32 бита, а больше? пусть 256 бит. Как в этом случае?
ava
Elve | 02.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=результат твоего поиска
ava
GePo | 02.11.2003, 21:29 #
Кажется меня никто не понимает или кто понимает, не хочет(не знает) как ответить. Поясню на пальцах. Есть последовательность бит(сколько угодно много). Из неё как-то надо получить СТРОКУ, в которой будет десятичное число. Число заведомо не влезает ни в один тип данных. И лобовой метод длинного сложения и умножения мне не нравится(должен быть другой).
ava
neutrino | 02.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
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
  neutrino   GePo   &-ray   Elve
advanced
Отправить