пятница, 25 мая 2012 г.

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


      Целые числа являются простейшими числовыми данными, с которыми оперирует ЭВМ. Целые числа в компьютере хранятся в формате с фиксированной запятой. В этом случае каждому разряду ячейки памяти соответствует всегда один и тот же разряд числа, а «запятая» находится справа после младшего разряда.

     Для хранения целого неотрицательного числа отводится одна ячейка памяти 1 байт (8 бит), т.е диапазон чисел, которые могут храниться в оперативной памяти в формате целых неотрицательных чисел, от 0 до 255 (всего 256 ). Минимальное число 0 соответствует восьми нулям, а максимальное 255 соответствует восьми единицам (25510 = 111111112).

      Для представления целого числа со знаком самый старший (левый) бит отводится под знак числа, остальные разряды - под само число. Если число положительное, то в знаковый разряд помещается 0, если отрицательное - 1. Например, в байте можно представить знаковые числа от -128 до 127.

      Для компьютерного представления целых чисел обычно используется один, два или четыре байта, то есть ячейка памяти будет состоять из восьми, шестнадцати или тридцати двух разрядов соответственно.


      Представление числа в привычной форме "знак"-"величина", при которой старший разряд ячейки отводится под знак, а остальные - под запись числа в двоичной системе, называется прямым кодом двоичного числа.


      Например, прямой код двоичных чисел 1001 и -1001 для 8-разрядной ячейки равен 00001001 и 10001001 соответственно.

     Положительные числа в ЭВМ всегда представляются с помощью прямого кода. Прямой код числа полностью совпадает с записью самого числа в ячейке машины.

     Прямой код отрицательного числа отличается от прямого кода соответствующего положительного числа лишь содержимым знакового разряда.
     Но отрицательные целые числа не представляются в ЭВМ с помощью прямого кода, для их представления используется дополнительный код.

     Дополнительный код положительного числа равен прямому коду этого числа.
      Дополнительный код отрицательного числа m равен 2n-|m|, где n - количество разрядов в ячейке.

     Дополнительный код используется для упрощения выполнения арифметических операций. Если бы вычислительная машина работала с прямыми кодами положительных и отрицательных чисел, то при выполнении арифметических операций следовало бы выполнять ряд дополнительных действий. Например, при сложении нужно было бы проверять знаки обоих операндов и определять знак результата. Если знаки одинаковые, то вычисляется сумма операндов и ей присваивается тот же знак. Если знаки разные, то из большего по абсолютной величине числа вычитается меньшее и результату присваивается знак большего числа. То есть при таком представлении чисел (в виде только прямого кода) операция сложения реализуется через достаточно сложный алгоритм. Если же отрицательные числа представлять в виде дополнительного кода, то операция сложения, в том числе и разного знака, сводится к их поразрядному сложению.

     Алгоритм получения дополнительного кода отрицательного числа.

     Для получения дополнительного k-разрядного кода отрицательного числа необходимо:  
модуль отрицательного числа представить прямым кодом в k- двоичных разрядах;
значение всех бит инвертировать: все нули заменить на единицы, а единицы на нули, таким образом, получается k-разрядный обратный код исходного числа);
к полученному обратному коду прибавить единицу.
Пример:
Получим 8-разрядный дополнительный код числа -52:
00110100 - число |-52|=52 в прямом коде
11001011 - число -52 в обратном коде
11001100 - число -52 в дополнительном коде


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

      Для представления вещественных чисел в современных компьютерах принят способ представления с плавающей запятой.
     Этот способ представления опирается на нормализованную (экспоненциальную) запись действительных чисел.
      Нормализованная запись отличного от нуля действительного числа A - это запись вида:
                                А= m* qn,
           где
              m – мантисса числа (правильная дробь, у которой первая цифра после запятой не равна нулю),
             q – основание системы,
             n – порядок числа.

Примеры:
1. 3,1415926 = 0, 31415926 * 101;
2. 1000=0,1 * 104;
3. 0,123456789 = 0,123456789 * 100;
4. 0,00001078 = 0,1078 * 8-4; (порядок записан в 10-й системе)
5. 1000,00012 = 0, 100000012 * 24.

     При представлении чисел с плавающей запятой часть разрядов ячейки отводится для записи порядка числа, остальные разряды - для записи мантиссы. По одному разряду в каждой группе отводится для изображения знака порядка и знака мантиссы.

Арифметические операции в двоичной системе счисления

 Из всех позиционных систем особенно проста двоичная система счисления. Рассмотрим выполнение основных арифметических действий над двоичными числами. 


     Все позиционные системы счисления "одинаковы”, а именно, во всех них выполняются арифметические операции по одним и тем же правилам:


справедливы одни и те же законы арифметики: коммутативный, ассоциативный, дистрибутивный;
справедливы правила сложения, вычитания и умножения столбиком;
правила выполнения арифметических операций опираются на таблицы сложения и умножения.
Сложение


  

 

Рассмотрим примеры на сложение. 



     При сложении столбиком двух цифр справа налево в двоичной системе счисления, как в любой позиционной системе, в следующий разряд может переходить только единица.


     Результат сложения двух положительных чисел имеет либо столько же цифр, сколько у максимального из двух слагаемых, либо на одну цифру больше, но этой цифрой может быть только единица.


Вычитание


  

 

     Рассмотрим примеры  на вычитание.



     При выполнении операции вычитания всегда из большего по абсолютной величине числа вычитается меньшее и у результата ставится соответствующий знак.


Умножение 
     Рассмотрим примеры  на умножение.



     Операция умножения выполняется с использованием таблицы умножения по обычной схеме (применяемой в десятичной системе счисления) с последовательным умножением множимого на очередную цифру множителя.
Рассмотрим примеры  на умножение.




     При выполнении умножения в примере 2 складываются три единицы 1+1+1=11 в соответствующем разряде пишется 1, а другая единица переносится в старший разряд.
В двоичной системе счисления операция умножения сводится к сдвигам множимого и сложению промежуточных результатов.


Деление


     Операция деления выполняется по алгоритму, подобному алгоритму выполнения операции деления в десятичной системе счисления.


     Рассмотрим примеры на деление

Перевод из десятичной системы счисления в любую другую


  Перевод из десятичной системы счисления в любую другую более сложен, чем наоборот из любой в десятичную. При этом необходимо учитывать, что алгоритмы перевода целых чисел и правильных дробей различаются.

      Алгоритм перевода целых чисел

Разделить данное число на основание новой системы счисления. Зафиксировать целое частное и остаток от деления (остаток всегда меньше основания).
Если полученное частное больше основания, то разделить частное на основание и вновь зафиксировать новое частное и остаток от деления.
Повторять процесс до тех пор, пока частное не получится меньше делителя.
Полученные остатки, являющиеся цифрами числа в новой системе счисления, привести в соответствие с ее алфавитом.
Записать последнее частное и полученные остатки в обратном порядке в ряд слева направо.
      В качестве примера переведем 1910 в двоичную систему счисления согласно алгоритму.
          1 форма записи


         2 форма записи


      Алгоритм перевода правильных десятичных дробей

Последовательно выполнять умножение исходной десятичной дроби и получаемых дробей на основание системы до тех пор, пока не получим нулевую дробную часть или не будет достигнута требуемая точность вычислений.
Получить искомую дробную часть, записав полученные целые части произведения в прямой последовательности.
      В качестве примера рассмотрим перевод десятичной дроби 0,7510 в двоичную систему, согласно алгоритму:
         1 форма записи

Ответ. 0,7510 = 0,112

 

         2 форма записи

   

      Перевод произвольных чисел
      Перевод произвольных чисел, т.е. содержащих целую и дробную часть, осуществляется в два этапа. Отдельно переводится целая часть, отдельно – дробная. В итоговой записи полученного числа целая часть отделяется от дробной запятой.

Перевод чисел в десятичную систему счисления


Развернутая форма записи числа
     В позиционной системе счисления любое число может быть представлено в развернутом виде. Возьмем число в десятичной системе счисления 247,32, и представим его в следующем виде:

247,3210 = 2*100 + 4*10+7*1+3/10+2/100 = 2*102 + 4*101 + 7*100 + 3*10-1 + 2*10-2

     Мы записали число в развернутой форме, в которой:
         2,4,7,3,2 - цифры числа
        10 - основание системы счисления
         показатели степени:  2,1,0,-1,-2  соответствуют номеру позиции цифры в числе.

     Основанием системы счисления  может служить любое натуральное число: 2, 3, 4, и т.д. Следовательно, возможно бесчисленное множество позиционных систем.

     Пусть q - основание системы счисления
                 n -  число разрядов целой части числа
                 m - число разрядов дробной части числа
                 ai - цифра числа
                 Aq - само число,
тогда развернутую форму для числа представленного в любой системе счисления
можно записать в общем виде следующим образом:

      Aq = an-1*qn-1 + an-2*qn-2 +  ... + a0*q0  + a-1*q-1 + a-2*q-2+ ...  +a-m*q-m

qi  - называется весом цифры числа

Вес цифры числа равен степени, где основание степени  равно основанию системы счисления, а показатель  - номеру позиции цифры в числе.

Развернутая форма записи числа равна сумме произведений цифры числа на ее вес.

Примеры развернутых записей чисел в различных системах счисления:

1.      423,31210 = 4*102 + 2*101+ 3*100+ 3*10-1+1*10-2 +2*10-3

2.      423,3125 = 4*52 + 2*51+ 3*50+ 3*5-1+1*5-2 +2*5-3

3.      423,3128 = 4*82 + 2*81+ 3*80+ 3*8-1+1*8-2 +2*8-3

Развернутая форма служит для перевода чисел из любой системы счисления в десятичную.

Алгоритм перевода чисел из любой системы счисления в десятичную

Представить число в
развернутой форме. При этом основание системы счисления должно быть
представлено в десятичной системе счисления
Найти сумму ряда
(выражения) . Полученное число является значением числа в десятичной
системе счисления.



История возникновения

     Большое количество недостатков непозиционных систем счисления привело людей к открытию позиционного принципа. Системы счисления, основанные на позиционном принципе возникли независимо одна от другой в древнем Междуречье (Вавилоне), у племени Майя и в Индии.

      В древнем Вавилоне примерно во II тысячелетие до нашей эры была такая система счисления - числа менее 60 обозначались с помощью двух знаков для единицы, и для десятка.Они имели клинообразный вид, так как вавилоняне писали на глиняных табличках палочками треугольной формы. Эти знаки повторялись нужное число раз, например
 
      Числа больше 60 записывались по разрядам, с небольшими пробелами между ними.
  
      В V веке до нашей эры был введен особый знак - наклонный клин для обозначения пропущенных разрядов, игравший роль нуля.
  

     Современная десятичная система счисления возникла приблизительтно в V веке н.э. в Индии. Возникновение этой системы стало возможным после величайшего открытия - цифры "0" для обозначения отсутствующей величины.
      Примерно во II веке до н.э. греки познакомились с вавилонской системой счисления и переняли ее, но числа от 1 до 59 они записывали в своей алфавитной нумерации. Для обозначения нулевого разряда греки стали использовать символ "О" (первая буква греческого слова Ouden - ничто).
      Индийцы познакомились с греческой и вавилонской системой счисления примерно между II и VI вв н.э. В это время индийцы использовали десятичную мультипликативную систему счисления. Они соединили ее с принципами нумерации чисел греческих астрономов.
      С возникшей в Индии десятичной системой счисления первыми познакомились арабы и завезли эту систему в Европу. С начала XII века эта десятичная система счисления получила распространение по всей Европе и получила название арабской. С тех пор цифры, используемые для записи чисел в десятичной системе счисления, называют арабскими.

Современные позиционные системы

     Позиционные системы счисления - это системы, в которых количественные значения цифр, используемых для записи чисел, зависят от их положения.

      Наиболее распространенными в настоящее время позиционными системами счисления являются десятичная, двоичная, восмеричная и шестнадцатиричная.

      Основными характеристиками позиционной системы счисления являются алфавит цифр и основание.  

     Алфавит системы счисления - это совокупность всех цифр, используемых в системе счисления.
     Основание системы счисления – количество цифр, используемое для представления чисел.
     Основанием может быть любое натуральное число.


     Разряд -  позиция цифры в числе.

Непозиционные системы счисления

    Люди научились считать очень давно. В последствии появилась потребность в записи чисел. Количество предметов изображалось нанесением черточек, засечек на какой-нибудь твердой поверхности.Чтобы два человека могли точно сохранить некоторую числовую информацию, они брали деревянную бирку, делали на ней нужное число зарубок, а потом раскалывали бирку пополам. Каждый уносил свою половинку и хранил ее. Этот прием позволял избегать спорных ситуаций. Археологами найдены такие записи при раскопках. Они относятся к 10-11 тысячелетию до н.э. 
      Ученые назвали такую систему записи чисел единичной (унарной), так как любое число в ней образуется путем повторения одного знака, символизирующего единицу.

     Позднее эти значки стали объединять в группы по 3, 5 и 10 палочек. Поэтому возникали более удобные системы счисления.
 
      Примерно в третьем тысячелетии до нашей эры египтяне придумали свою числовую систему, в которой для обозначения ключевых чисел использовались специальные значки – иероглифы. Каждый такой иероглиф мог повторяться не более 9 раз.Такая система счисления называется древнеегипетская десятичная непозиционная система счисления
 

     Примером непозиционной системы счисления, которая сохранилась до наших дней, может служить система счисления, применявшаяся более двух с половиной тысяч лет назад в Древнем Риме. Она называется римская система счисления. 
      В основе лежат знаки I(1), V(5), X(10), L(50), C(100), D(500), M(1000).
      Римскими цифрами пользовались очень долго, сегодня они используются в основном для наименования знаменательных дат, томов, разделов и глав в книгах.

      Чтобы записать число, римляне использовали не только сложение, но и вычитание. 
      Правила составления чисел в римской системе счисления: 

Идущие подряд несколько одинаковых цифр складываются(группа первого вида).
Если слева от большей цифры стоит меньшая, то от значения большей отнимается значение меньшей цифры(группа второго вида).
Значения групп и цифр, не вошедших в группы первого и второго вида складываются.
      В старину на Руси широко применялись системы счисления, напоминающие римскую. Они назывались ясачные. С их помощью сборщики податей заполняли квитанции об уплате подати (ясака) и делали записи в податной тетради. 
           «Русская книга податей»

 


     Непозиционные системы счисления имеют ряд существенных недостатков:

Существует постоянная  потребность введения новых знаков для записи больших чисел.
Невозможно представлять дробные и отрицательные числа.
Сложно выполнять арифметические операции, так как не существует алгоритмов их выполнения. В частности, у всех народов наряду с системами счисления были способы пальцевого счета, а у греков была счетная доска абак – что-то наподобие наших счетов.
      Но мы до сих пор пользуемся элементами непозиционной системысчисления в обыденной речи, в частности, мы говорим сто, а не десять десятков,тысяча, миллион, миллиард, триллион.

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



   "Все есть число" - так говорили пифагорейцы, подчеркивая необычайно важную роль чисел.
Люди всегда считали и записывали числа, даже пять тысяч лет назад. Но записывали они их совершенно по-другому, по другим правилам.
Известно множество способов представления чисел. Число изображается символом или группой символов некоторого алфавита. Такие символы называются цифрами.

     Цифры - это символы, участвующие в записи числа и составляющие некоторый алфавит.

Что же такое число?
      Первоначально число было привязано к тем предметам, которые пересчитывались. Но с появлением письменности число отделилось от предметов пересчета и появилось понятие натурального числа. Дробные числа появились в связи с тем, что человеку потребовалось что-то измерять и единица измерения не всегда укладывалась целое число раз в измеряемой величине. Далее понятие числа развивалось в математике и сегодня считается фундаментальным понятием не только математики, но и информатики.

     Число - это некоторая величина.
      Числа складываются из цифр по особым правилам. На разных этапах развития человечества, у разных народов эти правила были различны. Сегодня мы их называем системами счисления.

     Система счисления – это совокупность приемов и правил для обозначения и именования чисел.
      Все системы счисления делятся на позиционные и непозиционные. Непозиционные системы счисления появились раньше позиционных. Последние являются результатом длительного исторического развития непозиционных систем счисления.