Представление чисел в позиционной системе исчисления
Любое n-разрядное число K в позиционной системе может быть представлено в виде следующего полинома
где ai – весовые коэффициенты при соответствующих разрядах, X – основание системы.
Основание системы определяет количество чисел, которое используется в системе исчисления. Коэффициенты ai могут быть представлены только числами из этого набора. Например, в двоичной системе (основание X=2), используются числа 0 и 1, в десятичной (X=10) – 0…9, в шестнадцатеричной (X=16) – 0…9 и символы A,B,C,D,E,F.
Двоичная система исчисления является доминирующей в вычислительной технике. Она наиболее удобна для обработки данных, представленных на уровне электрических сигналов. Полином (1) в этом случае имеет вид
K = an-1*2n-1 + an-2*2n-2 + … + a1*21 + a0.
Двоичные числа могут отражать до 2n уникальных комбинаций и, соответственно, предоставляют диапазон изменения переменных 0…2n-1. Так для 8-разрядных чисел это 0…25510, для 16-разрядных - 0…655310 и т.д. (индексы 2,10,16 в обозначениях чисел используется как показатель основания системы).
В табл.1 приведен пример записи чисел в трех различных системах исчисления.
Табл.1. Числа в различных системах исчисления.
Десятичная |
Двоичная |
Шестнадцатеричная |
Десятичная |
Двоичная |
Шестнадцатеричная |
0 |
0 |
0 |
8 |
1000 |
8 |
1 |
1 |
1 |
9 |
1010 |
9 |
2 |
10 |
2 |
10 |
1001 |
A |
3 |
11 |
3 |
11 |
1011 |
B |
4 |
100 |
4 |
12 |
1100 |
C |
5 |
101 |
5 |
13 |
1101 |
D |
6 |
110 |
6 |
14 |
1110 |
E |
7 |
111 |
7 |
15 |
1111 |
F |
Представление чисел в дополнительном коде
Дополнительный код это наиболее распространенная форма представления знаковых чисел. Диапазон изменения чисел для n-разрядных данных в двоичной системе -2n-1…2n-1-1.
Представление неотрицательных чисел в дополнительном коде (см. табл.2) совпадает с соответствующим представлением чисел в позиционной системе. Отрицательные же числа в дополнительном коде получаются в результате следующего действия
- X = 2n – X (2).
Выражение (2) может быть записано также в следующем виде
- X = 2n-1 – X + 1 .
Из-за этого дополнительный код иногда называют “дополнение до двух” (2n-1 – X - действие инверсии или “дополнение до одного” и +1 – действие “дополнение до двух”).
Так, например, можно изменить знак 1-байтового числа 9510 на противоположный
9510 = 010111112 = 5F16
- 9510 = 111111112 - 10111112 + 12 = 101000012 = A116
Старший разряд в дополнительном коде всегда является показателем знака числа (знаковый разряд). У положительных чисел MSB=0, а у отрицательных - MSB=1. Модуль наибольшего положительного числа на единицу меньше модуля наименьшего отрицательного числа.
Табл.2. Представление чисел в дополнительном коде.
Десятичная система |
Двоичная |
Шестнадцатеричная |
Десятичная |
Шестнадцатеричная |
Двоичная |
7 |
0111 |
7 |
-1 |
F |
1111 |
6 |
0110 |
6 |
-2 |
E |
1110 |
5 |
0101 |
5 |
-3 |
D |
1101 |
4 |
0100 |
4 |
-4 |
C |
1100 |
3 |
0011 |
3 |
-5 |
B |
1011 |
2 |
0010 |
2 |
-6 |
A |
1010 |
1 |
0001 |
1 |
-7 |
9 |
1001 |
0 |
0000 |
0 |
-8 |
8 |
1000 |
Двоично-десятичное кодирование
Для хранения десятичных чисел часто используется двоично-десятичное кодирование (ДДК). В этом случае байты разбиваются на тетрады, в каждой из которых размещаются двоично-кодированные десятичные числа. Например, числу 100101102 в ДДК соответствует десятичное число 9610 (10012 = 910 – старший полубайт, 01102 = 610 – младший полубайт).
ДДК применяется в основном для представления пользовательской информации в удобной и понятной для человека десятичной системе исчисления. Однако формат ДДК позволяет хранить в одном байте только 100 десятичных чисел (числа 0…9910). И, кроме того, далеко не каждый микропроцессор имеет в своей системе команды для обработки чисел в ДДК (в частности, у микроконтроллеров AVR такие команды отсутствуют).
Представление чисел в форме с фиксированной запятой
Если полином из (1) умножить на X-m, где m неотрицательное целое число, то получим выражение для представления чисел с фиксированной запятой:
Числа такого типа содержат две части: целую и дробную. Под целую часть отводиться n-m разрядов, а под дробную m разрядов. Естественно, что в случае m=0 дробная часть отсутствует и (3) переходит формулу (1).
Например, 8-разрядное двоичное число K с m=4 будет иметь вид
K =a7*23 + a6*22 + a5*21 + a4*20 + a3*2-1 + a2*2-2 + a1*2-3 + a0*2-4 (3).
Разряды a7a6a5a4 представляют собой целую часть числа, а a3a2a1a0 – дробную.
Формат чисел с фиксированной запятой имеет обозначение (N.Q), где N и Q число целых и дробных разрядов соответственно. Так в предыдущем примере число K имеет формат (4.4).
При программировании 8-разрядных микроконтроллеров на ассемблере в подобной форме представления, как правило, нет необходимости. Однако числа с фиксированной запятой имеют определенные преимущества при цифровой обработке сигналов в специализированных DSP (Digital Signal Processor) процессорах, где их поддержка введена аппаратном уровне.
Представление чисел в форме с плавающей запятой
Числа с плавающей запятой имеют экспоненциальную форму записи, при которой отдельно представляются мантисса и порядок числа.
K = M * 2 E,
где M – мантисса, E – порядок.
Таким образом, числа с плавающей запятой должны отображаться в ОЗУ микропроцессора в виде двух частей, каждая из которых может иметь соответствующее число разрядов (чаще всего кратное 8).
Как M, так и E, могут быть знаковыми числами. Мантисса должна быть представлена в виде числа с фиксированной запятой и находиться в пределах 0≤|m|≤1, а порядок M – виде целого числа.
Для повышения точности представления чисел разрядность M требуется всегда выше, чем разрядность E. Диапазон же представления чисел практически полностью определяется разрядностью E.
Программирование математических операций над числами с плавающей запятой связано со значительными трудностями и требует большого расхода памяти программ и данных. К счастью такой формат является избыточным для подавляющего большинства приложений, где используются 8-разрядные микроконтроллеры, и в основном встречается только в некоторых задачах управления и фильтрации. Числа с плавающей запятой иногда также применяют для создания и пересылки архивов данных в компьютер.
Представление символьной информации в кодировке ASCII
ASCII (American Standard Code for Information Interchange) – общепринятый стандарт кодирования информации. В соответствии с ним каждому символу из табл.3 сопоставляется индивидуальный 7-разрядный числовой код. Таблица разделена на 128 частей, но реально, только диапазону адресов 0x20…0x7E соответствует информация, которая воспринимается, как символьная. Остальные кода, размещенные по адресам 0x00…0x1F и 0x7F, отведены командам управления. Большинство из них поддерживает любая терминальная программа, совместимая с протоколом обмена ASCII. Набор из 21 команды очень универсален и предоставляет широкие возможности по управлению процессом передачи данных. Наиболее распространенные из них приведены в табл.4.
Символы в таблице ASCII расположены не случайным образом, а имеют строгий порядок. Кода символов ‘0’…‘9’ получаются добавлением смещения 0x30 к своему числовому представлению. Буквы ‘A’…‘Z’ имеют порядок следования аналогичный латинскому алфавиту и получаются добавлением смещения 0x41 к порядковому номеру буквы в алфавите. То же самое относится к набору из 26 символов нижнего регистра ‘a’…‘z’ для получения, которых необходимо смещение 0x61.
Табл.3. Таблица символов в кодировке ASCII:
Десятичное значение |
Шестнад |
Символ |
Десятичное |
Шестнад |
Символ |
Десятичное |
Шестнад |
Символ |
Десятичное |
Шестнад |
Символ |
0 |
0 |
NUL |
32 |
20 |
|
64 |
40 |
@ |
96 |
60 |
` |
1 |
1 |
SOH |
33 |
21 |
! |
65 |
41 |
A |
97 |
61 |
a |
2 |
2 |
STX |
34 |
22 |
" |
66 |
42 |
B |
98 |
62 |
b |
3 |
3 |
ETX |
35 |
23 |
# |
67 |
43 |
C |
99 |
63 |
c |
4 |
4 |
EOT |
36 |
24 |
$ |
68 |
44 |
D |
100 |
64 |
d |
5 |
5 |
ENQ |
37 |
25 |
% |
69 |
45 |
E |
101 |
65 |
e |
6 |
6 |
ACK |
38 |
26 |
& |
70 |
46 |
F |
102 |
66 |
f |
7 |
7 |
BEL |
39 |
27 |
' |
71 |
47 |
G |
103 |
67 |
g |
8 |
8 |
BS |
40 |
28 |
( |
72 |
48 |
H |
104 |
68 |
h |
9 |
9 |
HT |
41 |
29 |
) |
73 |
49 |
I |
105 |
69 |
i |
10 |
A |
LF |
42 |
2A |
* |
74 |
4A |
J |
106 |
6A |
j |
11 |
B |
VT |
43 |
2B |
+ |
75 |
4B |
K |
107 |
6B |
k |
12 |
C |
FF |
44 |
2C |
, |
76 |
4C |
L |
108 |
6C |
l |
13 |
D |
CR |
45 |
2D |
- |
77 |
4D |
M |
109 |
6D |
m |
14 |
E |
SO |
46 |
2E |
. |
78 |
4E |
N |
110 |
6E |
n |
15 |
F |
SI |
47 |
2F |
/ |
79 |
4F |
O |
111 |
6F |
o |
16 |
10 |
DLE |
48 |
30 |
0 |
80 |
50 |
P |
112 |
70 |
p |
17 |
11 |
DC1 |
49 |
31 |
1 |
81 |
51 |
Q |
113 |
71 |
q |
18 |
12 |
DC2 |
50 |
32 |
2 |
82 |
52 |
R |
114 |
72 |
r |
19 |
13 |
DC3 |
51 |
33 |
3 |
83 |
53 |
S |
115 |
73 |
s |
20 |
14 |
DC4 |
52 |
34 |
4 |
84 |
54 |
T |
116 |
74 |
t |
21 |
15 |
NAK |
53 |
35 |
5 |
85 |
55 |
U |
117 |
75 |
u |
22 |
16 |
SYN |
54 |
36 |
6 |
86 |
56 |
V |
118 |
76 |
v |
23 |
17 |
ETB |
55 |
37 |
7 |
87 |
57 |
W |
119 |
77 |
w |
24 |
18 |
CAN |
56 |
38 |
8 |
88 |
58 |
X |
120 |
78 |
x |
25 |
19 |
EM |
57 |
39 |
9 |
89 |
59 |
Y |
121 |
79 |
y |
26 |
1A |
SUB |
58 |
3A |
: |
90 |
5A |
Z |
122 |
7A |
z |
27 |
1B |
ESC |
59 |
3B |
; |
91 |
5B |
[ |
123 |
7B |
{ |
28 |
1C |
FS |
60 |
3C |
< |
92 |
5C |
\ |
124 |
7C |
| |
29 |
1D |
GS |
61 |
3D |
= |
93 |
5D |
] |
125 |
7D |
} |
30 |
1E |
RS |
62 |
3E |
> |
94 |
5E |
^ |
126 |
7E |
~ |
31 |
1F |
US |
63 |
3F |
? |
95 |
5F |
_ |
127 |
7F |
DEL |
Табл.4. Описание наиболее распространенных управляющих символов ASCII:
Управляющие символы |
Описание |
Форма подстановки в текст программы |
LF |
Line Feed (Перевод строки). Указывает на движение курсора дисплея к началу следующей строки (на одну строку вниз). |
\n |
CR |
Carriage Return (Перевод каретки). Указывает на движение механизма печати или курсора дисплея к исходной (крайней левой) позиции текущей строки. |
\r |
BEL |
Bell (Звонок). Используется для управления устройствами сигнализации. |
\a |
BS |
Backspace (Возврат на один символ). Указывает на движение механизма печати или курсора дисплея назад на одну позицию. |
\b |
FF |
Form Feed (Перевод страницы). Указывает на движение курсора дисплея к исходной позиции следующей страницы экрана. |
\f |
HT |
Horizontal Tabulation (Горизонтальное Табулирование). Указывает на движение курсора дисплея до следующей предписанной позиции. |
\t |
VT |
Vertical Tabulation (Вертикальное Табулирование). Указывает на движение курсора дисплея к следующей группе строк. |
\v |
NUL |
Null (Нет данных). Используется для передачи в случае отсутствия данных. |
\0 |
Комментарии (0)
|
Я собрал (0) |
Подписаться
Для добавления Вашей сборки необходима регистрация