Автор Тема: Десятичное -> Двоичное  (Прочитано 3505 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Shults99

  • Гость
Десятичное -> Двоичное
« : Ноября 04, 2005, 01:41:26 pm »

 :) Начинаю программить на Си..
Не подскажите, какая функция переделывает символ в двоичный код?
И где вы ответ нашли..
Thnks/

yonas.briginas

  • Гость
Re: Десятичное -> Двоичное
« Ответ #1 : Ноября 04, 2005, 03:14:24 pm »
кажется таковой нет.
напиши свою ф-цию, например
вот алгоритм:

При переводе чисел из десятичной системы счисления в систему с основанием P > 1 обычно используют следующий алгоритм:

1) если переводится целая часть числа, то она делится на P, после чего запоминается остаток от деления. Полученное частное вновь делится на P, остаток запоминается. Процедура продолжается до тех пор, пока частное не станет равным нулю. Остатки от деления на P выписываются в порядке, обратном их получению;

2) если переводится дробная часть числа, то она умножается на P, после чего целая часть запоминается и отбрасывается. Вновь полученная дробная часть умножается на P и т.д. Процедура продолжается до тех пор, пока дробная часть не станет равной нулю. Целые части выписываются после двоичной запятой в порядке их получения. Результатом может быть либо конечная, либо периодическая двоичная дробь. Поэтому, когда дробь является периодической, приходится обрывать умножение на каком-либо шаге и довольствоваться приближенной записью исходного числа в системе с основанием P.


а) 464(10); б) 380,1875(10); в) 115,94(10) (получить пять знаков после запятой в двоичном представлении).

Решение.

     464 | 0       380 | 0    |1875            115 | 1      |94
     232 | 0       190 | 0   0|375               57 | 1     1|88
     116 | 0        95 | 1   0|75                 28 | 0     1|76
      58 | 0         47 | 1   1|5                   14 | 0     1|52
а)    29 | 1   б)   23 | 1   1|0        в)         7 | 1     1|04
      14 | 0        11 | 1                             3 | 1     0|08
       7 | 1         5 | 1                               1 | 1     0|16
       3 | 1         2 | 0
       1 | 1         1 | 1

а) 464(10) = 111010000(2); б) 380,1875(10) = 101111100,0011(2); в) 115,94(10) » 1110011,11110(2)

Оффлайн Фокусник

  • Светлый
  • Надворный советник
  • *****
  • Сообщений: 477
  • Репутация: 1
  • Пол: Мужской
Re: Десятичное -> Двоичное
« Ответ #2 : Ноября 04, 2005, 05:34:52 pm »
Цитировать
При переводе чисел из десятичной системы счисления в систему с основанием P > 1 обычно используют следующий алгоритм:

1) если переводится целая часть числа, то она делится на P, после чего запоминается остаток от деления. Полученное частное вновь делится на P, остаток запоминается. Процедура продолжается до тех пор, пока частное не станет равным нулю. Остатки от деления на P выписываются в порядке, обратном их получению;
Верно-то оно верно, но не совсем... если P равно степени двойки, то алгоритм значительно упрощается...

Для перевода в двоичную систему ничего ни на кого делить не нужно, нужно использовать битовое сравнение и сдвиги:
int a=112;
while(a!=0)
{
    printf("%d", a & 1);
    a = a >> 1;
}
Получится двоичная запись числа 112, но в обратном порядке.
Время не имеет значения, важна только жизнь

Shults99

  • Гость
Re: Десятичное -> Двоичное
« Ответ #3 : Ноября 04, 2005, 06:16:05 pm »
Фокуснику спасибо - это как раз то, что они имели ввиду. Странно, что первая задача в Си и уже хитрая...
Правда, выдает из-за while ошибку - но разбирусь.

yonas.briginas спасибо, что не оставил в беде.

Попутно спрашиваю первых людей, кто программит на Си с которыми я обменялся предложениями. Как бы мне так в среде работать и получать справку русскую по F1?
В Turbo Си v.2 или 3 есть такая возможность?
Я уже полнета достал этим вопросом, елси Вы ответите обещаю - прекращу.
Скачал классный справочник по стандартным функциям им потихоньку спасаюсь.
Что ещё полезного и где слить? Help!!

//DEn

  • Гость
Re: Десятичное -> Двоичное
« Ответ #4 : Ноября 04, 2005, 07:07:03 pm »
Скачал классный справочник по стандартным функциям им потихоньку спасаюсь.
Если не трудно начеркай ссылочку :)

Что ещё полезного и где слить? Help!!
Зайди на всеми известный http://www.firststeps.ru/  .Найдеш там много полезного.И поищи по форуму - такие вопросы уже были

Shults99

  • Гость
Re: Десятичное -> Двоичное
« Ответ #5 : Ноября 04, 2005, 10:20:32 pm »
Библиотечные функции
http://e-sementsov.narod.ru/files/BiblFunc.chm

//DEn

  • Гость
Re: Десятичное -> Двоичное
« Ответ #6 : Ноября 04, 2005, 11:01:07 pm »
Shults99, спасибо за линк, сайт очень даже полезный.

yonas.briginas

  • Гость
Re: Десятичное -> Двоичное
« Ответ #7 : Ноября 07, 2005, 07:13:50 pm »
Верно-то оно верно, но не совсем... если P равно степени двойки, то алгоритм значительно упрощается...

Для перевода в двоичную систему ничего ни на кого делить не нужно, нужно использовать битовое сравнение и сдвиги:
int a=112;
while(a!=0)
{
 printf("%d", a & 1);
 a = a >> 1;
}
Получится двоичная запись числа 112, но в обратном порядке.

согласен, так же можно восмиричную и 16-тиричную переводить, меняя маску и итерационное смещение. но это же новичёк. ему требуется понять сначало основы, а затем уже и работу с памятью на прямую... ( на мой взгляд самый огромный плюс в с++)
« Последнее редактирование: Ноября 07, 2005, 07:16:52 pm от yonas.briginas »

Оффлайн Фокусник

  • Светлый
  • Надворный советник
  • *****
  • Сообщений: 477
  • Репутация: 1
  • Пол: Мужской
Re: Десятичное -> Двоичное
« Ответ #8 : Ноября 07, 2005, 08:31:55 pm »
Точно ))
Время не имеет значения, важна только жизнь

Shults99

  • Гость
Re: Десятичное -> Двоичное
« Ответ #9 : Ноября 10, 2005, 07:45:07 pm »
Итак, русской справки для Turbo С нет в природе.. :(

Оффлайн Sinobi

  • Коллежский асессор
  • *****
  • Сообщений: 294
  • Репутация: 7
  • Пол: Мужской
  • Синоби-но-моно из клана Ига
Re: Десятичное -> Двоичное
« Ответ #10 : Ноября 11, 2005, 08:03:22 am »
Функция, переводящая число в 2-ич. код есть:
   int number = 123;
   char buffer_bin[225];
   itoa(number,buffer_bin,2);
        printf("%d(d)=%s(b)",number,buffer_bin);
В функции itoa 3-й параметр - основание системы счисления. Таким "макаром" мож. перевести число хоть в троичную, хоть в 19-ричную систему счисления. Правда если кому-то хочется реализовать алгоритм перевода из одной системы в другую "ручками", то это его личное дело :-)
Мудрость приходит со старостью... а иногда старость приходит одна