Вещественные числа в памяти ЭВМ могут быть записаны в двух формах:
1. С фиксированной точкой.
2. С плавающей точкой.
В форме с фиксированной точкой все числа представляются в виде последовательности цифр с постоянным положением точки, отделяющей целую часть от дробной (практически во всех языках программирования для разделения целой и дробной части используется точка, а не запятая).
Пример 4. В случае десятичной системы счисления, пяти разрядов для представления целой части и восьми разрядов для представления дробной части, числа 632, 24.1254 и ‑0.0125012 будут иметь вид:
+00632.00000000 +00024.12540000 -00000.01250120
Данная форма представления вещественных чисел является наиболее простой, но имеет небольшой диапазон представления, т.к. зачастую приходится хранить большое количество незначащих нулей.
В форме с плавающей точкой каждое число представляется в виде двух групп чисел, называемых мантиссой и порядком. При этом мантисса – наибольшее вещественное число по абсолютной величине меньшее 1, а порядок – целое число. Таким образом, любое вещественное число может быть представлено в виде:
±M×10±R,
где M – мантисса числа (),
R – порядок числа
Пример 5. В форме с плавающей точкой числа из предыдущего примера будут иметь вид:
+0.632×10+3 +0.241254×10+2 -0.125012×10-1
Далее рассмотрим особенности представления дробной части вещественного числа в двоичной системе счисления. Для перевода числа Q (|Q|<1), записанного в десятичной системе счисления, в двоичную систему счисления, можно использовать следующий алгоритм:
1. Число Q умножается на 2.
2. Целая часть полученного результата приписывается справа к двоичной записи числа.
3. Дробная часть результата, полученного в п. 1 принимается за число Q.
4. Осуществляется переход к п. 1.
Процесс продолжается вплоть до достижения заданной точности или до того момента, когда в п. 3 получится число 0.
Пример 6. Представить в двоичной системе счисления число 0.3125.
0.3125 x 2 = 0.625 ® 0
0.625 x 2 = 1.25 ® 1
0.25 x 2 = 0.5 ® 0
0.5 x 2 = 1.0 ® 1
0.0 {x 2 = 0}.
Таким образом, 0.3125(10) = 0.0101(2),
Пример 7. Представить в двоичной системе счисления число 0.428, если для записи дробной части этого числа выделен 1 байт.
1) 0.428 x 2 = 0.856 ® 0
2) 0.856 x 2 = 1.712 ® 1
3) 0.712 x 2 = 1.424 ® 1
4) 0.424 x 2 = 0.848 ® 0
5) 0.848 x 2 = 1.696 ® 1
6) 0.696 x 2 = 1.392 ® 1
7) 0.392 x 2 = 0.784 ® 0
8) 0.784 x 2 = 1.568 ® 1
… … … … …
0.428(10)» 0.01101101(2)
Очевидно, в общем случае для перевода вещественного числа (без знака) в 2 с/с необходимо перевести отдельно целую часть в 2 с/с (делением в столбик на 2), отдельно – дробную (по вышеописанному алгоритму), затем объединить (сложить) полученные результаты.
Пример 8.
9.3125(10) = 9(10) + 0.3125(10) = 1001(2) + 0.0101(2) = 1001.0101(2).
Приведенный пример показывает, что вещественные числа хранятся в памяти ПК, вообще говоря, приближенно. {Этот факт следует учитывать при написании программ. Например, если в память ПК занести число Q равное 0.428, а затем выполнить проверку условия «Q=0.428?», то, вполне вероятно, будет получен результат «не верно».}
Для перевода двоичного числа anan-1…a1a0 . a-1a-2…a1- s a- s в десятичную систему счисления используется формула
an ×2 n + an-1 ×2 n -1+ …+ a1 ×21+ a0 ×20+ a-1 ×2-1+ a-2 ×2-2+…+ a1-s ×21- s + a-s ×2- s
Пример 9. Перевести в десятичную систему счисления двоичное число, полученное в примере 7.
0.01101101(2) = 0×20+0×2-1+1×2-2+1×2-3+0×2-4+1×2-5+1×2-6+0×2-7+1×2-8 = 0.42578125 (не равно 0.428!)
Вопрос № 11 Следует отметить, что запись чисел в двоичной системе счисления является довольно громоздкой. Поэтому при программировании вместо двоичной системы счисления часто используется шестнадцатеричная, в которой для отображения цифр больших 9 используются буквы A=10, B=11, C=12, D=13, E=14, F=15. Для перевода чисел из двоичной системы счисления в шестнадцатеричную каждой шестнадцатеричной цифре ставят в соответствие группу из четырех двоичных разрядов (табл. 1).
Таким образом, чтобы перевести двоичное число в шестнадцатеричное, необходимо разбить его на группы по 4 разряда, приписав в случае необходимости слева нули, после чего сопоставить полученным группам шестнадцатеричные цифры согласно табл.
Пример 10. Перевести в шестнадцатеричную систему счисления двоичное число 1010101101001010111010.
Разобьем данное число на группы по 4 разряда. Т.к. всего число содержит 22 разряда, то слева необходимо приписать два нуля: 0010 1010 1101 0010 1011 1010. Воспользовавшись табл. 1, получаем: 1010101101001010111010(2) = 2AD2BA(16)
Замечание. Чтобы отличать шестнадцатеричные числа от десятичных, в конце записи шестнадцатеричного числа указывается символ h (hexadecimal – шестнадцатеричный)
Пример 11. 2035h = 10000000110101(2) = 8245 (проверить самостоятельно).
Вопрос № 12
Представление текстовой информации
{Как и любая другая информация, символьные данные должны храниться в памяти ЭВМ в двоичном виде.} Для хранения символьных данных в памяти ЭВМ каждому символу ставится в соответствие некоторое неотрицательное число, называемое кодом символа, и это число записывается в память ЭВМ в двоичном виде. Соответствие между набором символов и числами называется кодировкой символов.
В ЭВМ, как правило, используются 8-разрядные коды символов. Это позволяет закодировать 256 различных символов, {чего вполне достаточно для представления многих символов, используемых на практике.} Поэтому для кода символа достаточно выделить в памяти один байт.
В ПК наряду с более современными (Windows-1251, KOI-8 и др.) используется система кодировки ASCII (American Standard Code for Information Interchange). Кодировка ASCII имеет основной стандарт и его расширение. Основной стандарт использует для кодирования символов коды 00h – 7Fh, расширение стандарта – коды 80h – FFh. Основной стандарт является международным и используется для кодирования управляющих символов, цифр и букв латинского алфавита. В расширении стандарта кодируются символы псевдографики и букв национального алфавита. Кодировка ASCII некоторых символов приведена в табл.
Пример 12. Название шведской музыкальной группы “ABBA” кодируется следующим образом:
а) в 2 с/с: 01000001010000100100001001000001;
б) в 16 с/с: 41424241.
Вопрос № 13