Системы счисления

Система счисления – это способ изображения чисел и соответствующие ему правила действий над числами.
Различают два вида систем счисления: позиционные и непозиционные.
В позиционных системах счисления от позиции цифры в числе зависит величина, которую она обозначает.
Например, римская система счисления является непозиционной, а арабская - позиционная.
Рассмотрим два числа: 313 и CXLII.
В примере числа арабской системы счисления, цифра 3, стоящая на первом месте, означает количество сотен (т.е. число 300). А цифра 3, стоящая на последнем месте – количество единиц. В примере числа из римской системы, где бы ни стояла цифра I, она все равно означает 1 и правила прочтения числа здесь совсем иные. 
Примеров позиционных систем счисления много.
Количество используемых цифр в позиционной системе счисления называется основанием, а сами цифры - алфавитом.
Например:

Система Основание   Алфавит    Пример
Двоичная         2 0 1    101002
Восьмеричная         8 0 1 2 3 4 5 6 7    6548
Десятичная        10 0 1 2 3 4 5 6 7 8 9    28610
Шестнадцатеричная        16 0 1 2 3 4 5 6 7 8 9 А     В    С    D    E    F
                          (10)(11)(12)(13)(14)(15)

   A2F16
 
Основание системы счисления – любое натуральное число, большее единицы.

Алгоритм перевода чисел в систему с новым основанием:
1. Делим число на основание новой системы счисления, записывая остаток – младший разряд числа в новой системе.
2. Полученное частное снова делим, выписывая остаток.
3. И так до тех пор, пока последнее частное не станет меньше основания – старший разряд числа.
4. Выписываем остатки от старшего разряда к младшему и приписываем в качестве индекса основание системы.
Осуществим перевод числа 12610  в систему с основанием 2:

Ответ: 11111102

Любое число в десятичной системе счисления можно представить в виде суммы произведений соответствующих цифр, на соответствующие степени десятки.
Например: 24510 = 200 + 40 + 5 = 2 * 100 + 4 * 10 + 5 = 2 * 102 + 4 * 101 + 5 * 100
!  Не забывайте понятие степени числа: an = a * a * .. a  , где a 0 = 1. 
Оказывается, такая закономерность распространяется на любую систему счисления. Десятка - есть основание десятичной системы счисления. У новой системы счисления основанием будет другое число.
Число в любой системе счисления можно представить в виде суммы произведений соответствующих цифр, на соответствующие степени основания.
Например: 2231106 = 2 * 62 + 3 * 61 + 1 * 60 = 72 + 18 + 1 = 9110

Алгоритм перевода чисел в десятичную систему:
1. Нумеруем цифры числа справа налево, начиная с 0;
2. Составляем сумму произведений цифр, на степени основания системы соответствующие номерам;
3. Выполняем арифметические операции.
Осуществим перевод числа А216  в систему с основанием 10:
А12016 = 10 * 161 + 2 * 160 = 160 + 2 = 16210

Чтобы перевести из системы с одним основанием в систему с другим основанием, если оба основания отличны от 10, нужно: перевести данное число в десятичную систему, а затем перевести в новую систему.
Осуществим перевод числа 579 в систему с основанием 3:     
  51709 = 5 * 9 + 7 = 5210


Ответ: 12213 .

Перевод дробнорациональных чисел из одной системы счисления в другую осуществляется по тем же принципам.
Алгоритм перевода дробнорациональных чисел из системы с новым основанием в десятичную систему:
1. Нумеруем цифры числа от запятой справа налево, начиная с 0 и после запятой слева направо, начиная с -1;
2. Составляем сумму произведений цифр, на степени основания системы соответствующие номерам;
3. Выполняем арифметические операции.
Пример: осуществить перевод числа А2,8116 в десятичную систему.
Решение:
А120,8-11-216 = 10 * 161 + 2 * 160 + 8 * 16-1 + 1 * 16-2 = 160 + 2 + 8 / 16 + 1 / 256 = 162,5039062510
Алгоритм перевода дробнорациональных чисел из десятичной системы в систему с новым основанием:
I. Перевод целой части:
1. Делим число на основание новой системы счисления, записывая остаток – младший разряд целой части числа в новой системе;
2. Полученное частное снова делим, выписывая остаток;
3. И так до тех пор, пока последнее частное не станет меньше основания – старший разряд числа.
4. Выписываем остатки от старшего разряда к младшему и приписываем в качестве индекса основание системы.
II. Перевод дробной части:
1. Домножаем дробную часть числа на основание новой системы, выписывая целую часть – старший разряд дробной части числа в новой системе;
2. Дробную часть произведения снова домножаем на основание, выписывая целую часть;
3. И так до тех пор, пока в дробной части не будет 0, или не получим заданную точность, или не увидим период.
Пример: осуществить перевод с точностью до 6  знаков после запятой: 138,1510 в систему с основанием 2.
Решение:

I. Перевод целой части


13810 = 100010102

   II. перевод дробной части

* 2

0,
0
0
1
0
0
1
1
15
30
60
20
40
80
60
20


При переводе дробной части прослеживается периодичнось получаемых остатков, поэтому можно смело записывать ответ.
Ответ: 138,1510 = 10001010,00(1001)2
Внимание! Чтобы перевести из системы с одним основанием в систему с другим основанием, если оба основания отличны от 10, нужно перевести данное число в десятичную систему, а затем перевести в новую систему.

Представление положительных чисел в памяти компьютера


В памяти компьютера вся информация представлена в двоичном коде, т. е. в виде 0 и 1. Компьютерная память состоит из миниатюрных элементов – битов, каждый из которых может находиться в одном из двух состояний. Бит может содержать электрический ток, соответствующий норме (1), а может содержать электрический ток ниже допустимой нормы (0). В одном бите информации можно закодировать всего два числа 0 и 1. Поэтому биты объединяются в группы – байты.
Минимальным размером памяти для кодировки чисел следует выбрать 1 байт.
Минимальное неотрицательное число, которое можно закодировать в одном байте - это 0.
 7  6   5  4  3   2  1   0
 0   0   0   0   0   0   0
Максимальное неотрицательное число, которое можно закодировать в одном байте - это 255.
7   6   5  4   3   2  1  0
1   1   1   1   1   1   1   1
= 27 + 26 + 25 + 24 + 23 + 22 + 21 + 20 = 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255
Вывод: В одном байте можно закодировать числа от 0 до 255.
В языке Pascal для хранения неотрицательных чисел в диапазоне от 0 до 255 используется тип byte.
Для работы с неотрицательными числами большего диапазона решили смежные байты объединить по два.
Два смежных байта называются двухбайтовым машинным словом.
Минимальное неотрицательное число, которое можно закодировать в одном двухбайтовом слове -это 0.
15 14 13 12 11 10  9  8   7   6  5  4  3  2  1  0
0    0   0    0   0   0   0   0   0   0   0   0  0  0   0   0

Максимальное неотрицательное число, которое можно закодировать в одном двухбайтовом слове - это 65535.
15 14 13 12 11 10 9  8  7  6  5  4  3  2  1  0
1   1   1    1   1   1   1   1  1  1   1  1   1  1   1  1
= 216 - 1 = 65535
В языке Pascal для хранения неотрицательных чисел в диапазоне от 0 до 65535 используется тип word.
Алгоритм кодирования неотрицательных чисел:
1. Перевести число в двоичную систему;
2. Дополнить незначащими нулями до байта (или слова).
Алгоритм декодирования неотрицательных чисел:
1. Перевести число в десятичную систему.
Пример 1: получить код числа 163 в типах byte и word.
Решение:
Число 163 в двоичной системе счисления имеет вид 10100011.
Представление числа в типе byte должно иметь 8 разрядов, поэтому будет: 10100011.
Представление числа в типе word должно иметь 16 разрядов, поэтому будет: 0000000010100011.
Пример 2: декодировать числа 00100011 и 0000001011100010.
Решение:
001000112 = 0 * 27 + 0 * 26 + 1 * 25 + 0 * 24 + 0 * 23 + 0 * 22 + 1 * 21 + 1 * 20 = 32 + 2 + 1 = 35.
00000010111000102 = 1 * 29 + 1 * 27 + 1 * 26 + 1 * 25 + 1 * 21 = 512 + 128 + 64 + 32 + 2 = 738.

Сложение и вычитание чисел в форматах byte и word.

Компьютер – это машина, поэтому подчиняется строгим законам:
- результат сложения или вычитания чисел должен занимать в памяти компьютера целое количество байтов (1, 2 или 4);
- при сложении или вычитании чисел в двоичной системе действуют те же правила, что и при сложении или вычитании чисел в десятичной «столбиком»;
- при сложении или вычитании цифр в соответствующих разрядах необходимо следовать правилам двоичной арифметики:
0 + 0 = 0  
0 + 1 = 1 
1 + 0 = 1   
1 + 1 = 10 (0 пишу, 1 переношу в следующий разряд)
0 - 0 = 0  
0 - 1 = 1 (такой результат возможен только тогда, когда есть возможность занять из старших разрядов)
1 - 0 = 1   
1 - 1 = 0
Пример:

Если при сложении неотрицательных кодов чисел получаем код, занимающий в памяти компьютера больше места, чем исходные коды, то к нему необходимо приписать незначащие нули, до более крупного формата числа.
Поэтому в языке Pascal следует очень внимательно выбирать типы переменных величин.
Если, при выполнении операции сложения над переменными типа byte может быть получен результат больше 255, то тип результирующей переменной должен быть word, а иначе в ходе пограммы будет получен неверный результат.
Если, при выполнении операции вычитания над переменными типа byte или word может быть получен отрицательный результат, то тип результирующей переменной не может быть ни byte, ни word, а иначе в ходе пограммы будет получен неверный результат.
Для работы во множестве целых чисел с учетом их знака в языке Pascal используются типы данных shortint, integer и longint.

Представление чисел в памяти компьютера с учетом их знака

Для отрицательных чисел придумали другие правила кодировки. Решили старший бит в байте или слове отводить под знак числа. 
     7  6  5  4 3  2 1  0
знак  0  0  0


Знак числа: если 0, то «+», если 1, то «-».
Например, 10011011 – отрицательное, 01110011 – положительное.
Внимание: Кодирование и декодирование положительных чисел в форматах integer и longint производится по прежним правилам.
Алгоритм кодирования отрицательных чисел:
1. Переводим в двоичную систему модуль числа;
2. Дополняем до байта (слова);
3. Инвертируем (единицы заменяем нулями, а нули единицами);
4. Прибавляем единицу  по правилам двоичной арифметики.
Пример: закодировать –126 в одном байте.
Решение:
1) Переведем модуль:


Получили 1111110.
2) Дополним до байта: 01111110.
3) Инвертируем: 10000001
4) Прибавим 1:
     10000001
+               1
     10000010
Ответ: 10000010.
 
Если рассмотреть коды чисел с учетом их знака, то у неотрицательных чисел старший бит равен 0, а у отрицательных чисел - 1.
Алгоритм декодирования отрицательных чисел:
1. Инвертируем число (меняем единицы на нули, а нули на единицы);
2. Прибавляем единицу;
3. Переводим в десятичную систему;
4. Перед результатом ставим знак минус.
Пример: декодировать число 10011011.
Решение:
инвертируем: 01100100
прибавляем 1: 01100101
переводим в десятичную систему: 011001012 = 64 + 32 + 4 + 1 = 10110 
Ответ: -101.
Внимание:
Рассмотрим число 10000011. Если предположить, что при кодировке числа знак не учитывали, то есть, следовали правилам кодирования неотрицательных чисел, то при декодировании получим число 131. Если же следовать правилам представления чисел с учетом знака, то это число  -125. Чтобы компьютер не путал различные представления чисел, его заранее предупреждают о способе представления чисел (с учетом знака или без). Для этого в языке Pascal используют обозначения типов переменных (byte, word, integer и др).
Тип переменной означает:
1. Способ представления ее значений в памяти компьютера;
2. Диапазон значений, которые она может принимать;
3. Операции, которые можно с ней выполнять.

Целочисленные типы (целые величины)

Диапазон значений  Размер памяти  Способ представления  Название 
0..255  1 байт   Без учета знака Byte
0..65535  2 байта   Без учета знака Word
-128..127  1 байт   С учетом знака Shortint
-32768..32767  2 байта   С учетом знака Integer
-231..231-1  4 байта   С учетом знака Longint

Для работы во множестве рациональных чисел существуют вещественные типы. Самым применяемым вещественным типом в языке Pascal является тип real, занимающий 6 байтов памяти.

Адрес: 614039, г. Пермь, ул. Комсомольский проспект, 45
Телефон: +7 (342) 212-80-71
E-Mail: school9-perm@ya.ru
Вопрос администратору сайта