|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Andrey Tarasevich 2:5020/400 26 Jul 2003 11:46:21 To : Alexey Moiseev Subject : Re: Д.Е.Кнут "Исскусство программирования" 2ой том. --------------------------------------------------------------------------------
Alexey Moiseev wrote:
> ...
> И еще -- как переводить из одной системы счисления в другую без промежуточного
> перевода в десятиную?(упр.9 стр.243)
> ...
Странная постановка вопроса. Hе хочешь промежуточного перевода в
десятичную - сделай промежуточный перевод в двоичную :)
Если же использование промежуточной системы вообще не допустимо, то
читай дальше.
Если у тебе нужно перевести представление числа N из системы счисления с
основанием A в систему счисления с основанием B, то можно
воспользоваться одним из двух способов.
Первым способом является следующий:
- При помощи вычислителя, оперирующего представлениями чисел в системе
счисления A, производим операцию деления с остатком числа N на число B.
Остаток, записанный числом в системе счисления B, будет являться
очередной цифрой результата (в порядке справа налево). А над частным
снова производится операция деления и т.д.
Вторым способом является следующий:
- При помощи вычислителя, оперирующего представлениями чисел в системе
счисления B, вычисляем значение выражения
N_0 + N_1 * A + N_2 * A^2 + N_3 * A^3 + ...
где N_i - цифры представления числа N в системе счисления A,
рассматриваемые как числа в системе счисления B.
Как видишь, выбор одного из этих двух способов определяется тем, какой
системой счисления оперирует имеющийся у тебя вычислитель, при помощи
котрого ты будешь производить перевод.
Hапример, пусть нам необходимо перевести число, представляемое как
10101101b (в двоичной системе счисления), в шестнадцатиричную систему
счисления.
Если у нас имеется двоичный вычислитель, то мы можем воспользоваться
первым способом, т.е. производить циклическое деление нашего исходного
числа на число 10000b (= 16h)
10101101b / 10000b = 1010b, ост - 1101b = Dh
1010b / 10000b = 0b, ост - 1010b = Ah
Таким образом, результат - ADh.
Если же у нас имеется шестнадцатиричный вычислитель, что мы можем
воспользоваться вторым способом, т.е. просто вычислить значение выражения
1h + 0h * 2h + 1h * 4h + 1h * 8h + 0h * 10h + 1h * 20h +
+ 0h * 40h + 1h * 80h = ADh
--
Best regards,
Андрей.
--- ifmail v.2.15dev5
* Origin: Demos online service (2:5020/400)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/668242d0e0f4.html, оценка из 5, голосов 10
|