Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод двоичного числа, в десятичной системе счисления 
:(
    Опции темы
GePo
Дата 1.11.2003, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 30.3.2003
Где: Москва

Репутация: нет
Всего: 3



А как комп переводит двоичной число в десятичное строковое представление(то бишь есть 00010100, а он выводит, что 20). Врядли это делается "влоб".
Немного конкретизирую вопрос - есть двоичное представление числа, пусть это будет массив байтов. Как из него получить десятеричное число в строке
--------------------
PM MAIL WWW   Вверх
&-ray
Дата 2.11.2003, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 406
Регистрация: 15.4.2003
Где: Казахстан, г Аста на

Репутация: нет
Всего: нет



Здесь действует формула:

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


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

Код
1*2^0+1*2^1+0*2^2+...+0*2^8



--------------------
"Совсем неважно от чего помрешь, ведь куда важнее - для чего родился..." С.Б.

--------------------
И снова мышь беру я в руки
Куда иду? - Конечно в сруки!
PM MAIL WWW   Вверх
neutrino
Дата 2.11.2003, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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 
PM MAIL WWW ICQ Skype GTalk   Вверх
GePo
Дата 2.11.2003, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 30.3.2003
Где: Москва

Репутация: нет
Всего: 3



Не, это не то. Вывод и перевод все равно доверяется компу. А если у нас не 8, не 16, не 32 бита, а больше? пусть 256 бит. Как в этом случае?
--------------------
PM MAIL WWW   Вверх
Elve
Дата 2.11.2003, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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=результат твоего поиска
PM MAIL   Вверх
GePo
Дата 2.11.2003, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 30.3.2003
Где: Москва

Репутация: нет
Всего: 3



Кажется меня никто не понимает или кто понимает, не хочет(не знает) как ответить. Поясню на пальцах. Есть последовательность бит(сколько угодно много). Из неё как-то надо получить СТРОКУ, в которой будет десятичное число. Число заведомо не влезает ни в один тип данных. И лобовой метод длинного сложения и умножения мне не нравится(должен быть другой).
--------------------
PM MAIL WWW   Вверх
neutrino
Дата 2.11.2003, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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 
PM MAIL WWW ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0740 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.