2.3. Перевод чисел из одной системы счисления в другую
[4, 5]
Позиционной системой счисления называется такая система счисления, в которой значение числового знака зависит от его расположения в записи числа.
Если основание одной систем счисления, например, шестнадцатеричной, кратно основанию другой, например, двоичной, то перевод осуществляется группировкой знаков и переводом каждой группы по отдельности.
В общем случае для перевода чисел из десятичной системы счисления используется один из двух способов: разложение по степеням основания или деление.
Для перевода делением существует удобная форма записи.
Пример: перевести 123410 в двоичную систему счисления.
1234 |
|
617 |
0 |
308 |
1 |
154 |
0 |
77 |
0 |
38 |
1 |
19 |
0 |
9 |
1 |
4 |
1 |
2 |
0 |
1 |
0 |
0 |
1 |
Новая запись числа читается снизу вверх: 10011010010.
3.1. Целые неотрицательные числа
3.2. Целые отрицательные числа
3.3. Числа с плавающей точкой
3.4. Символы
3.5. Двоично-десятичное представление
В большинстве ЭЦВМ, в том числе тех, где используются процессоры Intel, все числа хранятся в двоичном виде с фиксированным количеством разрядов.
В ЭЦВМ типа IBM PC основной единицей хранения всех типов данных является 8-битный байт. Кроме однобайтовых чисел используются также 2, 4, 8 и 10-байтные. По историческим причинам, 2-байтная единица информации называется словом, а 4-байтная — двойным словом. Такие названия сохранились со времён процессора Intel 8086, который, действительно, имел 2-байтное слово.
Целые неотрицательные числа представляются естественным образом: в виде последовательности битов. Единственная особенность состоит в том, что в оперативной памяти ЭЦВМ типа IBM PC, имеющей линейную структуру, разделённую на байты, младшие байты любой многобайтной единицы хранятся в младших адресах, старшие — в старших. Таким образом, 4-байтное число будет храниться в памяти следующим образом:
Биты |
7 |
… |
0 |
15 |
… |
8 |
23 |
… |
16 |
31 |
… |
24 |
Байты памяти |
1 |
2 |
3 |
4 |
При сложении целых чисел, если сумма не помещается в разрядной сетке, старший разряд теряется. Например, при сложении 1-байтных чисел 11111111 и 00000001 получится результат 00000000. Правда, при этом в регистре флагов процессора будет установлен флаг переноса (CF), о чём будем говорить позже.
Замечание. Конструкцией памяти ЭЦВМ типа IBM PC не предусмотрены какие-либо встроенные указатели типа данных, хранящихся в том или ином байте или регистре. Эти указатели должен предусматривать сам программист, если он не хочет держать эту информацию в голове. Процессор, взятый сам по себе, также не знает, 00110000 — это число 48, это код символа «0», или ещё какой-то другой код.
Существует множество представлений отрицательных чисел. В процессорах Intel используется наиболее простое для использования и исходящее из определения отрицательного числа. По определению, отрицательное число это такое число, что . Исходя из этой информации, а также из того, что положительных и отрицательных чисел должно представляться примерно поровну, уже можно определить, как представляются отрицательные числа. Например,
.
Следовательно, 11111111 и есть машинное представление числа –1. Заметим попутно, что ситуация, когда сумма знаковых чисел не помещается в разрядной сетке, называется переполнением.
Что нужно, чтобы из 00000001 получить 11111111? Нужно инвертировать все биты и добавить 1. Несложно доказать, что это правило верно в общем случае. Например, число, обратное к 01010101 есть 10101011.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.