|
|
|
Система счисления это совокупность приемов и правил, по которым числа записываются и читаются. |
Существуют позиционные и непозиционные системы счисления.
В непозиционных системах счисления вес цифры (т. е. тот вклад, который она вносит в значение числа) не зависит от ее позиции в записи числа. Так, в римской системе счисления в числе ХХХII (тридцать два) вес цифры Х в любой позиции равен просто десяти.
В позиционных системах счисления вес каждой цифры изменяется в зависимости от ее положения (позиции) в последовательности цифр, изображающих число. Например, в числе 757,7 первая семерка означает 7 сотен, вторая 7 единиц, а третья 7 десятых долей единицы.
Сама же запись числа 757,7 означает сокращенную запись выражения 700 + 50 + 7 + 0,7 = 7 . 102 + 5 . 101 + 7 . 100 + 7 . 10—1 = 757,7.
Любая позиционная система счисления характеризуется своим основанием.
Основание позиционной системы счисления количество различных цифр, используемых для изображения чисел в данной системе счисления. |
За основание системы можно принять любое натуральное число два, три, четыре и т.д. Следовательно, возможно бесчисленное множество позиционных систем: двоичная, троичная, четверичная и т.д. Запись чисел в каждой из систем счисления с основанием q означает сокращенную запись выражения
an-1 qn-1 + an-2 qn-2
+ ... + a1 q1 + a0 q0 + a-1
q-1 + ... + a-m q-m,
где ai цифры системы счисления;
n и m число целых и дробных разрядов, соответственно.
Например:
В каждой системе счисления цифры упорядочены в соответствии с их значениями:
1 больше 0, 2 больше 1 и т.д.
Продвижением цифры называют замену её следующей по величине. |
Продвинуть цифру 1 значит заменить её на 2, продвинуть цифру 2 значит заменить её на 3 и т.д. Продвижение старшей цифры (например, цифры 9 в десятичной системе) означает замену её на 0. В двоичной системе, использующей только две цифры 0 и 1, продвижение 0 означает замену его на 1, а продвижение 1 замену её на 0.
Целые числа в любой системе счисления порождаются с помощью Правила
счета [44]:
Для образования целого числа, следующего за любым данным целым числом, нужно продвинуть самую правую цифру числа; если какая-либо цифра после продвижения стала нулем, то нужно продвинуть цифру, стоящую слева от неё. |
Применяя это правило, запишем первые десять целых чисел
Кроме десятичной широко используются системы с основанием, являющимся целой степенью числа 2, а именно:
|
|
Из всех систем счисления особенно проста и поэтому интересна
для технической реализации в компьютерах двоичная система счисления.
Люди предпочитают десятичную систему, вероятно, потому, что с древних времен считали по пальцам, а пальцев у людей по десять на руках и ногах. Не всегда и не везде люди пользуются десятичной системой счисления. В Китае, например, долгое время пользовались пятеричной системой счисления.
А компьютеры используют двоичную систему потому, что она имеет ряд преимуществ перед другими системами:
Двоичная система, удобная для компьютеров, для человека неудобна из-за ее громоздкости и непривычной записи.
Перевод чисел из десятичной системы в двоичную и наоборот выполняет машина. Однако, чтобы профессионально использовать компьютер, следует научиться понимать слово машины. Для этого и разработаны восьмеричная и шестнадцатеричная системы.
Числа в этих системах читаются почти так же легко, как десятичные, требуют
соответственно в три (восьмеричная) и в четыре (шестнадцатеричная)
раза меньше разрядов, чем в двоичной системе (ведь числа 8 и 16 соответственно,
третья и четвертая степени числа 2).
Перевод восьмеричных и шестнадцатеричных чисел в двоичную систему очень прост: достаточно каждую цифру заменить эквивалентной ей двоичной триадой (тройкой цифр) или тетрадой (четверкой цифр). |
Например:
Чтобы перевести число из двоичной системы в восьмеричную или шестнадцатеричную, его нужно разбить влево и вправо от запятой на триады (для восьмеричной) или тетрады (для шестнадцатеричной) и каждую такую группу заменить соответствующей восьмеричной (шестнадцатеричной) цифрой. |
Например,
Для перевода целого десятичного числа N в систему счисления с основанием q необходимо N разделить с остатком ("нацело") на q , записанное в той же десятичной системе. Затем неполное частное, полученное от такого деления, нужно снова разделить с остатком на q , и т.д., пока последнее полученное неполное частное не станет равным нулю. Представлением числа N в новой системе счисления будет последовательность остатков деления, изображенных одной q-ичной цифрой и записанных в порядке, обратном порядку их получения. |
Пример: Переведем число 75 из десятичной системы в двоичную,
восьмеричную и шестнадцатеричную:
Ответ: 7510 = 1 001 0112 =
1138 = 4B16.
Для перевода правильной десятичной дpоби F в систему счисления с основанием q необходимо F умножить на q , записанное в той же десятичной системе, затем дробную часть полученного произведения снова умножить на q, и т. д., до тех пор, пока дpобная часть очередного пpоизведения не станет pавной нулю, либо не будет достигнута требуемая точность изображения числа F в q-ичной системе. Представлением дробной части числа F в новой системе счисления будет последовательность целых частей полученных произведений, записанных в порядке их получения и изображенных одной q-ичной цифрой. Если требуемая точность перевода числа F составляет k знаков после запятой, то предельная абсолютная погрешность при этом равняется q -(k+1) / 2. |
Пример. Переведем число 0,36 из десятичной системы в двоичную, восьмеричную и шестнадцатеричную:
Для чисел, имеющих как целую, так и дробную части, перевод из десятичной системы счисления в другую осуществляется отдельно для целой и дробной частей по правилам, указанным выше. |
Перевод в десятичную систему числа x, записанного в q-ичной
cистеме счисления (q = 2, 8 или 16) в виде
xq = (anan-1 ...
a0 , a-1 a-2
... a-m)q сводится к
вычислению значения многочлена x10 = an qn + an-1 qn-1 + ... + a0 q0 + a-1 q -1 + a-2 q-2 + ... + a-m q-m средствами десятичной арифметики. |
Примеpы:
Рассмотрим только те системы счисления, которые применяются в компьютерах десятичную, двоичную, восьмеричную и шестнадцатеричную. Для определенности возьмем произвольное десятичное число, например 46, и для него выполним все возможные последовательные переводы из одной системы счисления в другую. Порядок переводов определим в соответствии с рисунком:
На этом рисунке использованы следующие обозначения:
Рассмотрим основные арифметические операции: сложение, вычитание, умножение и деление. Правила выполнения этих операций в десятичной системе хорошо известны это сложение, вычитание, умножение столбиком и деление углом. Эти правила применимы и ко всем другим позиционным системам счисления. Только таблицами сложения и умножения надо пользоваться особыми для каждой системы.
Таблицы сложения легко составить, используя Правило Счета.
Сложение в двоичной системе
|
Сложение в восьмеричной системе
|
При сложении цифры суммируются по разрядам, и если при этом возникает
избыток, то он переносится влево.
Пример 1. Сложим числа 15 и 6 в
различных системах счисления.
Шестнадцатеричная: F16+616
|
Ответ: 15+6 = 2110 = 101012 = 258 = 1516.
Проверка. Преобразуем полученные суммы к десятичному виду: 101012 = 24 + 22 + 20 = 16+4+1=21, 258 = 2 . 81 + 5 . 80 = 16 + 5 = 21, 1516 = 1 . 161 + 5 . 160 = 16+5 = 21. |
Шестнадцатеричная: F16+716+316
|
Ответ: 5+7+3 = 2510 = 110012
= 318 = 1916.
Проверка: 110012 = 24 + 23 + 20 = 16+8+1=25, 318 = 3 . 81 + 1 . 80 = 24 + 1 = 25, 1916 = 1 . 161 + 9 . 160 = 16+9 = 25. |
Ответ: 141,5 + 59,75 = 201,2510 = 11001001,012
= 311,28 = C9,416
Проверка. Преобразуем полученные суммы к десятичному виду:
11001001,012 = 27 + 26 + 23
+ 20 + 2-2 = 201,25
311,28 = 3 . 82 + 181 + 1 . 80
+ 2 . 8-1 = 201,25
C9,416 = 12 . 161 + 9 . 160 + 4 . 16-1
= 201,25
Ответ: 201,2510 - 59,7510 = 141,510
= 10001101,12 = 215,48 = 8D,816.
Проверка. Преобразуем полученные разности к десятичному виду:
10001101,12 = 27 + 23 + 22
+ 20 + 2-1 = 141,5;
215,48 = 2 . 82 + 1 . 81 + 5 . 80
+ 4 . 8-1 = 141,5;
8D,816 = 8 . 161 + D . 160 + 8 . 16-1
= 141,5.
Выполняя умножение многозначных чисел в различных позиционных системах счисления, можно использовать обычный алгоритм перемножения чисел в столбик, но при этом результаты перемножения и сложения однозначных чисел необходимо заимствовать из соответствующих рассматриваемой системе таблиц умножения и сложения.
Умножение в двоичной системе
|
Умножение в восьмеричной системе
|
Ответ: 5 . 6 = 3010 = 111102 = 368.
Проверка. Преобразуем полученные произведения к десятичному виду:
111102 = 24 + 23 + 22 +
21 = 30;
368 = 381 + 680 = 30.
Пример 8. Перемножим числа 115 и 51.
Ответ: 115 . 51 = 586510 = 10110111010012
= 133518.
Проверка. Преобразуем полученные произведения к десятичному виду:
10110111010012 = 212 + 210 + 29
+ 27 + 26 + 25 + 23 + 20
= 5865;
133518 = 1 . 84 + 3 . 83 + 3 . 82
+ 5 . 81 + 1 . 80 = 5865.
Ответ: 30 : 6 = 510 = 1012 = 58.
Пример 10. Разделим число 5865 на
число 115.
Восьмеричная: 133518 :1638
Ответ: 5865 : 115 = 5110 = 1100112 = 638.
Проверка. Преобразуем полученные частные к десятичному виду:
1100112 = 25 + 24 + 21
+ 20 = 51; 638 = 6 . 81 + 3 . 80
= 51.
Пример 11. Разделим число 35 на
число 14.
Восьмеричная: 438 : 168
Ответ: 35 : 14 = 2,510 = 10,12 = 2,48.
Проверка. Преобразуем полученные частные к десятичному виду:
10,12 = 21 + 2 -1 = 2,5;
2,48 = 2 . 80 + 4 . 8-1 = 2,5.
Целые числа могут представляться в компьютере со знаком или без знака.
Целые числа без знакаОбычно занимают в памяти компьютера один
или два байта. В однобайтовом
формате принимают значения от
000000002 до 111111112.
В двубайтовом формате - от 00000000
000000002 до 11111111 111111112.
Диапазоны значений целых чисел без знака
Формат числа в байтах | Диапазон | |
Запись с порядком | Обычная запись | |
1 | 0 ... 28-1 | 0 ... 255 |
2 | 0 ... 216-1 | 0 ... 65535 |
Примеры:
а) число 7210 = 10010002 в однобайтовом формате:
б) это же число в двубайтовом формате:
в) число 65535 в двубайтовом формате:
Целые числа со знаком
Обычно занимают в памяти компьютера один, два или четыре байта, при этом
самый левый (старший) разряд содержит информацию о знаке числа.
Диапазоны значений целых чисел со знаком
Формат числа в байтах | Диапазон | |
Запись с порядком | Обычная запись | |
1 | -27 ... 27-1 | -128 ... 127 |
2 | -215 ... 215-1 | -32768 ... 32767 |
4 | -231 ... 231-1 | -2147483648 ... 2147483647 |
Рассмотрим особенности записи целых чисел со знаком на примере однобайтового формата, при котором для знака отводится один разряд, а для цифр абсолютной величины - семь разрядов.
В компьютерной технике применяются три формы записи (кодирования)
целых чисел со знаком: прямой код, обратный код, дополнительный код. |
Последние две формы применяются особенно широко, так как позволяют упростить конструкцию арифметико-логического устройства компьютера путем замены разнообразных арифметических операций операцией cложения.
Положительные числа в прямом, обратном и
дополнительном кодах изображаются одинаково - двоичными кодами с
цифрой 0 в знаковом разряде. Например:
Отрицательные числа в прямом, обратном и дополнительном кодах имеют разное изображение.
1. Прямой код. В знаковый разряд помещается цифра 1, а в разряды
цифровой части числа двоичный код его абсолютной величины. Например:
2. Обратный код. Получается инвертированием всех цифр двоичного кода
абсолютной величины числа, включая разряд знака: нули заменяются единицами, а
единицы нулями. Например:
3. Дополнительный код. Получается образованием обратного кода с
последующим прибавлением единицы к его младшему разряду. Например:
Обычно отрицательные десятичные числа при вводе в машину автоматически преобразуются в обратный или дополнительный двоичный код и в таком виде хранятся, перемещаются и участвуют в операциях. При выводе таких чисел из машины происходит обратное преобразование в отрицательные десятичные числа.
В большинстве компьютеров операция вычитания не используется. Вместо нее производится сложение обратных или дополнительных кодов уменьшаемого и вычитаемого. Это позволяет существенно упростить конструкцию АЛУ.
Сложение обратных кодов. Здесь при сложении чисел А и В имеют место четыре основных и два особых случая:
1. А и В положительные. При суммировании
складываются все разряды, включая разряд знака. Так как знаковые разряды
положительных слагаемых равны нулю, разряд знака суммы тоже равен нулю. Например:
Получен правильный результат.
2. А положительное, B отрицательное и по абсолютной величине
больше, чем А. Например:
Получен правильный результат в обратном коде. При переводе в прямой
код биты цифровой части результата инвертируются: 1 0000111 = -710.
3. А положительное, B отрицательное и по абсолютной величине меньше, чем А. Например:
Компьютер исправляет полученный первоначально неправильный результат (6
вместо 7) переносом единицы из знакового разряда в младший разряд суммы.
4. А и В отрицательные. Например:
Полученный первоначально неправильный результат (обратный код числа -1110 вместо обратного кода числа -1010) компьютер исправляет переносом единицы из знакового разряда в младший разряд суммы. При переводе результата в прямой код биты цифровой части числа инвертируются: 1 0001010 = -1010.
При сложении может возникнуть ситуация, когда старшие разряды результата операции не помещаются в отведенной для него области памяти. Такая ситуация называется переполнением разрядной сетки формата числа. Для обнаружения переполнения и оповещения о возникшей ошибке в компьютере используются специальные средства. Ниже приведены два возможных случая переполнения.
5. А и В положительные, сумма А+В больше, либо равна 2n-1,
где n количество разрядов формата чисел (для однобайтового формата n=8,
2n-1 = 27 = 128). Например:
Семи разрядов цифровой части числового формата недостаточно для размещения восьмиразрядной суммы (16210 = 101000102), поэтому старший разряд суммы оказывается в знаковом разряде. Это вызывает несовпадение знака суммы и знаков слагаемых, что является свидетельством переполнения разрядной сетки.
6. А и В отрицательные, сумма абсолютных величин А и В больше, либо равна 2n-1. Например:
Здесь знак суммы тоже не совпадает со знаками слагаемых, что свидетельствует о переполнении разрядной сетки.
Сложение дополнительных кодов. Здесь также имеют место рассмотренные выше шесть случаев:
1. А и В положительные. Здесь нет отличий от случая 1, рассмотренного для обратного кода.
2. А положительное, B отрицательное и по абсолютной величине больше,
чем А. Например:
Получен правильный результат в дополнительном коде. При переводе в
прямой код биты цифровой части результата инвертируются и к младшему
разряду прибавляется единица: 1 0000110 + 1 = 1 0000111 = -710.
3. А положительное, B отрицательное и по абсолютной величине меньше,
чем А. Например:
Получен правильный результат. Единицу переноса из знакового разряда
компьютер отбрасывает.
4. А и В отрицательные. Например:
Получен правильный результат в дополнительном коде. Единицу переноса
из знакового разряда компьютер отбрасывает.
Случаи переполнения для дополнительных кодов рассматриваются по аналогии со случаями 5 и 6 для обратных кодов.
Сравнение рассмотренных форм кодирования целых чисел со знаком показывает:
Во многих компьютерах умножение производится как последовательность сложений и сдвигов. Для этого в АЛУ имеется регистр, называемый накапливающим сумматором, который до начала выполнения операции содержит число ноль. В процессе выполнения операции в нем поочередно размещаются множимое и результаты промежуточных сложений, а по завершении операции окончательный результат.
Другой регистр АЛУ, участвующий в выполнении этой операции, вначале содержит множитель. Затем по мере выполнения сложений содержащееся в нем число уменьшается, пока не достигнет нулевого значения.
Для иллюстрации умножим 1100112 на 1011012.
Деление для компьютера является трудной операцией. Обычно оно реализуется путем многократного прибавления к делимому дополнительного кода делителя.
Система вещественных чисел в математических вычислениях предполагается непрерывной и бесконечной, т.е. не имеющей ограничений на диапазон и точность представления чисел. Однако в компьютерах числа хранятся в регистрах и ячейках памяти с ограниченным количеством разрядов. В следствие этого система вещественных чисел, представимых в машине, является дискретной (прерывной) и конечной.
При написании вещественных чисел в программах вместо привычной запятой
принято ставить точку. Для отображения вещественных чисел, которые могут быть как очень маленькими,
так и очень большими, используется форма записи чисел с порядком основания
системы счисления. Например, десятичное число 1.25 в этой форме можно представить так:
1.25 . 100 = 0.125 . 101 = 0.0125 . 102
= ...
или так:
12.5 . 10-1 = 125.0 . 10-2 = 1250.0 . 10-3 = ... .
Любое число N в системе счисления с основанием q можно записать в виде N = M . qp, где M множитель, содержащий все цифры числа (мантисса), а p целое число, называемое порядком. Такой способ записи чисел называется представлением числа с плавающей точкой. |
Если "плавающая" точка расположена в мантиссе перед первой значащей цифрой, то при фиксированном количестве разрядов, отведённых под мантиссу, обеспечивается запись максимального количества значащих цифр числа, то есть максимальная точность представления числа в машине. Из этого следует:
Мантисса должна быть правильной дробью, у которой первая цифра после точки
(запятой в обычной записи) отлична от нуля: 0.12 Внимание! Если у вас не получилось найти нужную информацию, используйте рубрикатор или воспользуйтесь поиском . книги по программированию исходники компоненты шаблоны сайтов C++ PHP Delphi скачать |
|