Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.03.2010, 07:27   #1
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию Алгоритм перевода чисел из двоичной системы в десятеричную

Здравствуйте. Изучая "Библию Delphi", наткнулся на системы исчисления. В книге написано, что 'старайтесь избегать помощи опытных людей"(что-то вроде того). Долго сидел и пытался разобрать алгоритм работы. Ну что ж поделаешь, не могу понять.
Цитата из книги "Библия Delphi"
Цитата:
Давайте посчитаем значение числа по этой формуле, начиная с нулевого
разряда. Получается, что 6 нужно умножить на 10 в нулевой степени
6 х 10° = 6. Потом прибавить 4 х 10 в 1 степени, или 4 х 10 1 = 40 (и того уже 46). Потом 2 х 10 во второй степени, 2 х 10 2 = 200 (итого 246). потом 8 х 10 в 3 степени, 8 х 103
= 8000 (и того 8246) и т. д." В итоге получится
число 519 578 246.
А теперь рассмотрим двоичную систему счисления. Здесь каждый разряд
может принимать значение 0 или 1 (2 состояния). Кстати, в десятичной сис-
теме у нас каждый разряд мог принимать значения от 0 до 9, т. е. имел де-
сять состояний. Давайте рассмотрим следующий байт — 010000111. Запи-
шем его на листке бумаги так, как показано на рис. 1.3.
Номер разряда 87654321 О
Биты 010000111
Рис. 1.3. Двоичное число
10 Глава 1
Здесь действует та же самая формула, только нужно возводить в степень
не 10, а число 2. Опять же произведем расчет, начиная с нулевого разряда, т. е. справа налево. Получается, что первую 1 мы должны умножить на 2 в нулевой степени (1x2°= 1). Следующую единицу нужно умножить на 2',
получается 2 (итого 2 + 1 = 3) и т. д. Вот как это будет выглядеть полностью:(В скобках степень числа слева)
(1 х 2(0)) + (1 х 2(1)) + (1 х 2(2)) + (0 х 2(3)) + (0 х 2(4)) + (0 х 2(5)) + (0 х 2(6)) + (1 х 2(7)) + (0 х 2(8)) = 135
Вот так, оказывается, выглядит в двоичной системе счисления число 135.
Давайте теперь научимся пересчитывать числа из десятичной системы в
двоичную. Для этого нужно число 135 разделить на 2. Получается 67 и оста-
ток 1 (запомним 1, т. к. она определяет первый двоичный разряд искомого
числа). Теперь 67 снова делим на 2, получается 33 и остаток 1 (таким обра-
зом получено уже две двоичные единицы, т. е. 11). 33 делим на 2, получаем
16 и остаток 1 ( в результате получаем три двоичные единицы, 111). 16 де-
лим на 2, получаем 8 и остаток 0 (результат 0111). И наконец, 8 делим на
2 = 4, остаток от деления при этом будет 0 (получаем 00111); 4 делим на
2 = 2, остаток 0 (получаем 000111). 2 делим на 2=1, остаток 0 (итого
0000111). Оставшаяся 1 частного на 2 не делится, значит, это последний,
самый старший разряд искомого числа. Просто дописываем ее к ранее
сформированным разрядам и получаем окончательный ответ— 10000111.
Получилось первоначальное число.
Вот так происходит преобразование чисел в двоичную систему счисления.
Таким же образом можно перевести число в любую другую систему
(двоичную, восьмеричную, шестнадцатеричную). Для более полного закреп-
ления материала в табл. 1.1 показано соответствие десятичных чисел двоич-
ным. Попробуйте сами перевести пару чисел из одной системы счисления в другую.
В цитате могут быть ошибки. Мне не только хочется изучить эту книгу полностью, но и узнать системы исчисления.

P.S.
Я не студент, поэтому учу для себя.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Старый 16.03.2010, 07:44   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Ну что ж поделаешь, не могу понять.
Ну так а что не понятно то?
Вроде все написано правильно, и алгоритм верный.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.03.2010, 10:53   #3
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Во вложении часть статьи, касающейся систем счисления.
Программно (в Дельфи) - функция первода десятичного числа (N) в двоичное (mas[_bit] - массив битов) :

Код:
var
  mas: array[0..15] of byte; // двоичное число в виде массива битов
  weight: integer = 65536; // "вес" максимального разряда (для integer - 65536, для byte - 128)



function Dec_Bin(N: integer; _bit: byte): byte; // N - десятичное число, которое переводим в двоичное
var i: byte;

begin
  for i:= 0 to 15 do  // для integer 16 разрядов, для byte - 8 разрядов (for i:= 0 to 7)
  begin
    mas[i]:= N div weight;
    if mas[i] = 1 then N:= N - weight;
    weight:= weight div 2;
  end;
  Result:= mas[_bit];
end;
Вложения
Тип файла: rar Счисления.rar (22.1 Кб, 44 просмотров)
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 16.03.2010, 15:53   #4
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию

DeKot, спасибо. можете объяснить "Откуда берут разряд?".

P.S.
Я еще Delphi не знаю.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог

Последний раз редактировалось _PROGRAMM_; 16.03.2010 в 15:56.
_PROGRAMM_ вне форума Ответить с цитированием
Старый 16.03.2010, 16:51   #5
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Цитата:
"Откуда берут разряд?".
Для переменных, принимаемых числовое значение (по-просту для чисел) используются соответствующий тип данных.
К примеру числа от 0 до 255 описывают типом byte, числа от -65535 до +65536 - типом integer, дробные числа - тип real и так далее.
Так число 255 в десятичной системе записывается тремя цифрами или тремя разрядами (сотни 2 * 100, десятки 5 * 10 и еденицы 5 * 1). Это же число в двоичной системе изображается в виде битов ( имеет два значения 0 или 1) и таких битов (или же еще называемые разрядами) восемь - 1 1 1 1 1 1 1 1 . Это и есть байт в двоичной системе - восьмиразрядное двоичное число).
Для integer уже надо два байта или 16 разрядов чтобы поместился весь допустимый диапазон чисел.
Все это достаточно расписано во многих учебниках, почитайте в Википедии, воспользуйтесь поиском по Интернету.
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 16.03.2010, 17:05   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
_PROGRAMM_
Разряд это фактически цифра числа
т.е. в 35 разряды 3 и 5
А в 1101 разряды единицы и нули.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод числа из двоичной системы в десятичную С++ kontroller Помощь студентам 2 15.02.2010 20:39
формула перевода чисел из десятичной системы счисления в 2-ую,8-ую и 16-ую в Microsoft Visual c#? Лютик Помощь студентам 0 18.12.2009 10:42
паскаль,программа для перевода чисел из 10-ой системы счисления в другую до10-ой Nikitaunett Помощь студентам 4 28.11.2009 20:06
написал алгоритм перевода чисел из 10 в любую другую систему счисления...компилиться, но не выполняеться STR78 Общие вопросы C/C++ 4 03.11.2008 17:07
помогите нужен код для преобразования двоичной системы в десятиричную и обратно xakkkkker Общие вопросы Delphi 2 08.02.2008 14:44