Другие языки программирования и технологии

Алгоритмы перевода чисел из одной системы счисления в другую, арифметика в различных системах счисления

Arsen Aliev
Arsen Aliev
100
Никак не въеду, зачем людей мучают темой перевода. Не могу себе представить, где на практике может понадобиться умение делать перевод из 3х разрядной в 17и разрядную (и тем более арифметику) . В жизни их всего 3, причём 8иричная становится анахронизмом, 16иричная лишь короткая запись бинарной и используется для сокращения в иллюстративном контексте. Неужели других тем преподы не могут придумать. Мало того, что алгоритмов великое множество, так и сам смысл в разборке чужого представляется сомнительным. Надо вперёд двигаться, а не тормозить на уже сделанном. Зачем изучать то, что даже в компе не используется, где смысл?
Александр Шашков
Александр Шашков
80 392
Лучший ответ
Arsen Aliev я тоже не понимаю зачем вообще это надо тем более заочникам
Вот видео на эту тему:
https://www.youtube.com/watch?v=xdT1cOHiZLc&list=UUWCGpoRrnJmmYnxO09Ix2RQ
А вот статьи:
http://vestikinc.narod.ru/AB/index.htm
======================================
Алгоритмы перевода чисел из одной системы в другую.

В программировании используются три системы счисления: двоичная, десятичная и шестнадцатеричная.

Поэтому, должно быть пять алгоритмов перехода:
1. Из двоичной в десятичную;
2. Из двоичной в шестнадцатеричную;
3. Из десятичной в двоичную;
4. Из десятеричной в шестнадцатеричную;
5. Из шестнадцатеричной в двоичную;
6. Из шестнадцатеричной в десятичную.

Теперь, сами алгоритмы:
1. Допустим есть число в двоичной системе исчисления:
1010. Его нужно перевести в десятичную.
Нужно умножить поразрядно каждую цифру на основание в степени разряда. Какое основание в двоичной системе? Ответ: два. Основание определили. Теперь, как

это умножить на степень разряда? Разряды в числе считаются справа налево. Т. е. в числе 1010 это 0-первый разряд, 1-второй, 0-третий, 1-четвёртый. Как это

выглядит? 0*2^0 + 1*2^1 + 0*2^2 + 1*2^3 = 0 + 2 + 0 + 8 = 10. Т. е. 1010 в двоичной системе = 10 в десятеричной.
2. Перевести из двоичной в шестнадцатеричную.
1110. Число уже другое. Не 1010.
Точно так же.
0*2^0 + 1*2^1 + 1*2^2 + 1*2^2 = 0 + 2 + 4 + 8 = E

3. Нужно перевести из десятичной системы в двоичную.
Есть число 15. Нужно перевести в двоичную систему. Алгоритм такой:
Делим 15 и (12) на два и остаток записываем.
15 / 2 = 7 (и остаток 1)12 / 2 = 6 (и остаток 0)
7 / 2 = 3 (и остаток 1)6 / 2 = 3 (и остаток 0)
3 / 2 = 1 (и остаток 1)3 / 2 = 1 (и остаток 1)
1 / 2 = 0 (и остаток 1)1 / 2 = 0 (и остаток 1)
Записываем остатки 1111Записываем остатки 1100
Остатки записываются снизу вверх.

4. Теперь нужно перевести из десятичной системы в шестнадцатеричную.
Есть число 68 и 157 в десятичной системе.
68 / 16 = 4 (и остаток 4)157 / 16 = 9 (и остаток 13 или D (D=13))
4 / 16 = 0 (и остаток 4)9 / 16 = 0 (и остаток 9)
Записываем остатки 44.Записываем 9D

5. Теперь осталась только шестнадцатеричная система счисления.
Как из неё переводить числа? Допустим 157 и 8FD нужно перевести в двоичную систему. Это самый простой алгоритм из перечисленных. Для перевода нужно

каждую цифру заменяем её эквивалентом в двоичной системе. Как расчитать эквивалент? Нужно помнить, что на каждую цифру из шестнадцатеричной системы

приходится четыре цифры в двоичной. Например, 7 это 0111 или F (т. е. 15) это 1111 или D (т. е. 13) это 1101
Т. е. цифры 1, 5 и 7 это 0001, 0101 и 0111. А вместе это 157 и 000101010111
Или 8, F и D это 1000, 1111 и 1101 А вместе это 8FD и 100011111101

6. Последний алгоритм это из шестнадцатеричной ситстемы перевести в десятичную.
Например 157 и 8FD Нужно перевести в 10-тичную.
Нужно перевести цифры в десятичную систему, потому умножить их на основание шестнадцатеричной системы (*16) в степени разряда цифры. Например, число 157
7*16^0 + 5*16^1 + 1*16^2 = 7*1 + 5*16 + 1*256 = 343
Или число 8FD нужно перевести в десятичную систему, тогда
D(13)*16^0 + F(15)*16^1 + 8(8)*16^2 = 13*1 + 15*16 + 8*256 = 2301

Похожие вопросы