среда, 24 сентября 2014 г.

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



ЦЕЛЫЕ ЧИСЛА В КОМПЬЮТЕРЕ. 

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

Каждый элемент ячейки называют разрядом!

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


БЕЗ ЗНАКОВОЕ ПРЕДСТАВЛЕНИЕ ПОЛОЖИТЕЛЬНЫХ ЦЕЛЫХ ЧИСЕЛ В КОМПЬЮТЕРЕ. 

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

           Самое большое целое положительное число, которое мы можем записать в k разрядах, состоит из единиц во всех разрядах ячейки. Если перевести это число в десятичную систему счисления, то оно равно 2k – 1. Минимальное число состоит из нулей и равно 0. 

Количество разрядов 
Максимальное число 
8
28 – 1 = 255
16
216 – 1 = 65535
32
232 – 1 = 4294967295 


ЗНАКОВОЕ ПРЕДСТАВЛЕНИЕ ЦЕЛЫХ ЧИСЕЛ В КОМПЬЮТЕРЕ. 

           Чтобы и в компьютере представлять числа в привычном для человека виде, необходимо самый левый разряд ячейки отвести для записи знака числа.
  • при записи положительного числа в самый левый разряд ячейки, который называется знаковым, записывается 0, 
  • при записи отрицательного числа 1.
       
           Максимальное число, которое можно записать в k разрядах при знаковом представлении, практически вдвое меньше максимального числа, которое можно записать в тех же k разрядах при беззнаковом представлении. Поэтому если изначально известно, что обрабатываемые данные неотрицательны, то записывать их лучше в без знаковом виде.

НЕДОСТАТКИ ПРЯМОГО КОДА ПРИ ПРЕДСТАВЛЕНИИ ОТРИЦАТЕЛЬНЫХ ЧИСЕЛ. 

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

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

Предположим, что нам нужно выполнить действие: 5 – 4. 

Число –4 представляется в дополнительном коде как 11111100, число 5 представляется как 00000101. Сложим эти два числа: 

    0 0 0 0 0 1 0 1 
    1 1 1 1 1 1 0 0 
 1 0 0 0 0 0 0 0 1 

           Самая левая единица результата выйдет за разрядную сетку ячейки, а поэтому не сохранится. В результате в ячейку запишется число 00000001. А это число есть 1. Таким образом, операцию вычитания мы заменили операцией сложения. 

АЛГОРИТМ ПОСТРОЕНИЯ ДОПОЛНИТЕЛЬНОГО КОДА. 

           В k-разрядной целочисленной компьютерной арифметике 2k = 0, так как единица в самом старшем разряде числа 2k должна стоять в k+1 разряде и следовательно, «выползает» за границы ячейки. То есть дополнительный код отрицательного числа m равен 2k – |m|. Такая замена позволяет заменить операцию вычитания чисел на операцию сложения. 

           Поэтому для k-разрядной ячейки дополнительный код отрицательного числа можно получить следующим образом:

  • Модуль числа представляется прямым кодом в k разрядах. 
  • В прямом коде все нули заменяются на единицы, а единицы – на нули. Таким образом получаем обратный код. 
  • К полученному обратному коду прибавляется единица. 

АЛГОРИТМ ПОЛУЧЕНИЯ ЧИСЛА ПО ДОПОЛНИТЕЛЬНОМУ КОДУ. 

           Иногда требуется по имеющемуся дополнительному коду числа восстановить исходное число. Модуль искомого числа в таком случае можно получить двумя способами: 

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

ПЕРЕЧИСЛЕНИЕ ЦЕЛЫХ ЗНАКОВЫХ ЧИСЕЛ.

           Расположим целые знаковые числа, которые можно записать в 8-разрядах, в порядке возрастания на числовой оси: 

  • Если мы хотим прибавить к какому-либо числу единицу, то сдвигаемся по этой оси вправо. 
  • Если мы хотим отнять от какого-либо числа единицу, то сдвигаемся влево. 
           Но что произойдет, если мы прибавим единицу к числу 127? Выполним операцию прибавления 1 к числу 127.
127 = 111111112
127 + 1 = 128 = 100000002 

           Мы получили единицу в знаковом бите, т.е. мы получили отрицательное число. Все остальные биты этого числа – нули. Применив алгоритм восстановления отрицательного числа по его дополнительному коду, мы получим, что 100000002 = –128.
           Следовательно, наш «компьютерный» отрезок замкнулся. В k-разрядной компьютерной арифметике все целые числа расположены по кольцу, причем рядом с максимальным расположено минимальное в конкретном представлении. 


ОСОБЕННОСТИ ЦЕЛОЧИСЛЕННОЙ КОМПЬЮТЕРНОЙ АРИФМЕТИКИ. 

           В связи с тем, что количество чисел, которые могут быть представлены в k разрядах, ограничено, при выполнении арифметических действий в целочисленной k-разрядной арифметике могут возникнуть следующие ситуации:

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

Комментариев нет:

Отправить комментарий