Опубликован: 04.12.2009 | Доступ: свободный | Студентов: 8416 / 657 | Оценка: 4.30 / 3.87 | Длительность: 27:27:00
Лекция 4:

Работа с числами в языке Java

< Лекция 3 || Лекция 4: 12345 || Лекция 5 >

Шестнадцатеричное представление целых чисел и перевод из одной системы счисления в другую

Во время программирования различного рода внешних устройств, регистров процессора, битовыми масками, кодировке цвета, и так далее, приходится работать с кодами беззнаковых целых чисел. При этом использование десятичных чисел крайне неудобно из-за невозможности легкого сопоставления числа в десятичном виде и его двоичных бит. А использование чисел в двоичной кодировке крайне громоздко – получаются слишком длинные последовательности нулей и единиц. Программисты используют компромиссное решение – шестнадцатеричную кодировку чисел, где в качестве основания системы счисления выступает число 16. Очевидно, 16_{10}=10_{16}. В десятичной системе счисления имеется только 10 цифр: 0,1,2,3,4,5,6,7,8,9. А в 16-ричной системе счисления должно быть 16 цифр. Принято обозначать недостающие цифры заглавными буквами латинского алфавита: A,B,C,D,E,F. То есть 10_{10}=A=A_{16}, 11_{10}=B, 12_{10}=C, 13_{10}=D, 14_{10}=E, 15_{10}=F. Таким образом, к примеру, FF_{16}=15\cdot 16^1+15\cdot 16^0=255.

В Java для того, чтобы отличать 16-ричные числа, как мы уже знаем, перед ними ставят префикс 0x: 0xFF обозначает FF_{16}, а 0x10 – это 10_{16}, то есть 16.

Число N может быть записано с помощью разных систем счисления. Например, в десятичной:

N = A_n 10^n + ... + A_2 10^2 + A_1 10^1 + A_0 10^0\qquad (A_n = 0 .. 9)

или в двоичной:

N = B_n 2^n + ... + B_2 2^2 + B_1 2^1 + B_0 2^0\qquad (B_n = 0\text{ или }1)

или в шестнадцатеричной:

N = C_n 16^n + ... + C_2 16^2 + C_1 16^1 + C_0 16^0\qquad (C_n = 0 .. F)

Преобразование в другую систему счисления сводится к нахождению соответствующих коэффициентов. Например, B_n по известным коэффициентам A_n – при переводе из десятичной системы в двоичную, или коэффициентов A_n по коэффициентам B_n - из двоичной системы в десятичную.

Преобразование чисел из системы с меньшим основанием в систему с большим основанием

Рассмотрим преобразование из двоичной системы в десятичную. Запишем число N в виде

N = B_n 2^n + ... + B_2 2^2 + B_1 2^1 + B_0 2^0\qquad (B_n = 0\text{ или }1)

и будем рассматривать как алгебраическое выражение в десятичной системе. Выполним арифметические действия по правилам десятичной системы. Полученный результат даст десятичное представление числа N.

Пример:

Преобразуем 01011110_2 к десятичному виду. Имеем:

01011110_2 = 0\cdot 2^7+1\cdot 2^6+0\cdot 2^5+1\cdot 2^4+1\cdot 2^3+1\cdot 2^2+1\cdot 2^1+0\cdot 2^0= 0 + 64 + 0 + 16 + 8 + 4 + 2 + 0 = 94_{10}

Преобразование чисел из системы с большим основанием в систему с меньшим основанием

Рассмотрим его на примере преобразования из десятичной системы в двоичную. Нужно для известного числа N_{10} найти коэффициенты в выражении

N = B_n 2^n + ... + B_2 2^2 + B_1 2^1 + B_0 2^0\qquad (B_n = 0\text{ или }1)

Воспользуемся следующим алгоритмом: в десятичной системе разделим число N на 2 с остатком. Остаток деления (он не превосходит делителя) даст коэффициент B_0 при младшей степени 2^0. Далее делим на 2 частное, полученное от предыдущего деления. Остаток деления будет следующим коэффициентом B_1 двоичной записи N. Повторяя эту процедуру до тех пор, пока частное не станет равным нулю, получим последовательность коэффициентов B_n.

Например, преобразуем 345_{10} к двоичному виду. Имеем:

Таблица 4.2.
частное остаток B_i
345 / 2 172 1 B_0
172 / 2 86 0 B_1
86 / 2 43 0 B_2
43 / 2 21 1 B_3
21 / 2 10 1 B_4
10 / 2 5 0 B_5
5 / 2 2 1 B_6
2 / 2 1 0 B_7
1 / 2 0 1 B_8
345_{10} = 101011001_2

Преобразование чисел в системах счисления с кратными основаниями

Рассмотрим число N в двоичном и шестнадцатеричном представлениях.

N = B_n 2^n + ... + B_2 2^2 + B_1 2^1 + B_0 2^0\qquad (B_n = 0\text{ или }1)
N = H_n 16^n + ... + H_2 16^2 + H_1 16^1 + H_0 16^0\quad (H_i = 0 .. F_{16}\text{, где }F_{16} =15_{10})

Заметим, что 16 = 2^4. Объединим цифры в двоичной записи числа группами по четыре. Каждая группа из четырех двоичных цифр представляет число от 0 до F_{16}, то есть от 0 до 15_{10}. От группы к группе вес цифры изменяется в 2^4=16 раз (основание 16-ричной системы). Таким образом, перевод чисел из двоичного представления в шестнадцатеричное и обратно осуществляется простой заменой всех групп из четырех двоичных цифр на шестнадцатеричные (по одному на каждую группу) и обратно :

Таблица 4.3.
0000_2 = 0_{16}
0001_2 = 1_{16}
0010_2 = 2_{16}
0011_2 = 3_{16}
0100_2 = 4_{16}
0101_2 = 5_{16}
0110_2 = 6_{16}
0111_2 = 7_{16}
1000_2 = 8_{16}
1001_2 = 9_{16}
1010_2 = A_{16}
1011_2 = B_{16}
1100_2 = C_{16}
1101_2 = D_{16}
1110_2 = E_{16}
1111_2 = F_{16}

Например, преобразуем 1011010111_2 к шестнадцатеричному виду:

1011010111_2 = 0010\;1101\;0111_2 = 2D7_{16}
< Лекция 3 || Лекция 4: 12345 || Лекция 5 >
Полетаев Дмитрий
Полетаев Дмитрий
Не очень понятно про оболочечные Данные,ячейки памяти могут наверно размер менять,какое это значение те же операции только ячейки больше,по скорости тоже самое
Максим Старостин
Максим Старостин

Код с перемещением фигур не стирает старую фигуру, а просто рисует новую в новом месте. Точку, круг.