русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Арифметические действия и коды чисел


Дата добавления: 2014-09-02; просмотров: 816; Нарушение авторских прав


Арифметические действия, выполняемые в двоичной системе, подчиняются тем же основным правилам, что и в десятичной системе. Только в двоичной системе перенос единиц в старший разряд происходит несравнимо чаще. Вот как выглядит таблица сложения в двоичной системе:

0 + 0 = 0

0 + 1 = 1

1 + 0 = 1

1 + 1 = 0 + перенос=1

Примеры.

11010 10111

+10010 +1000

101100 11111

Для упрощения аппаратных средств современных вычислительных машин их арифметические устройства не содержат специальных схем выполнения вычитания. Эта операция производится тем же устройством, которое выполняет сложение, т.е. сумматором. Но для этого вычитаемое должно быть преобразовано из прямого кода, с которым мы познакомились выше, в специальный код. Ведь в десятичной системе тоже приходится преобразовывать числа: сравните: 13 - 5 и 13 + (-5). Такой обратный код в двоичной системе получают путем изменения в числе всех разрядов на противоположные - операции инвертирования. Например, инвертирование числа 0101 даст число 1010. Опыт выполнения операций над числами в обратном коде показал, что они требуют ряда дополнительных преобразований, неизбежно ведущих к усложнению аппаратных средств. Поэтому широкого распространения этот код не получил.

При выполнении математических действий результат может получиться не только положительным, но и отрицательным. Как же представить знак минус в схемах машины, если в них фиксируется лишь два состояния - 1 и 0? Договорились знак числа определять самым левым битом. Если число положительное, то этот бит (знаковый) равен нулю (сброшен), если отрицательное - единице (установлен). Решение о введении знакового разряда сказалось на максимальных величинах представляемых чисел. Максимальное положительное 16-битное число равно +32767, а отрицательное –32768. Оказалось, что наиболее удобно оперировать двоичными данными в дополнительном коде. Единственная сложность - надо прибавить единицу к обратному коду числа - получится дополнительный код.



Десятичное число Прямой код Обратный код Дополнительный код
-8 - -
-7
-6
-5
-4
-3
-2
-1
-0
+0

В таблице приведены десятичные числа и их двоичные представления в трех различных формах. Интересно в ней вот что. Если начать счет с числа 1000 (-8) и двигаться вниз по столбцам, то в дополнительном коде каждое последующее число получается прибавлением единицы к предыдущему без учета переноса за пределы четвертого разряда. Так просто эту операцию в прямом и обратном кодах не осуществить. Эта особенность дополнительного кода и явилось причиной предпочтительного применения его в современных ЭВМ.

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

 

+2 0010 -2 1110

+ + + +

+5 0101 -6 1010

               
     
 
 
   
 


+7 0111 -8 1000

 

+5 0101 +3 0011

+ + + +

-4 1100 -7 1001

               
   
     
     
 


+1 0001 -4 1100

 

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

Подытоживая наше знакомство с дополнительным кодом, обобщим величину десятичного значения числа в дополнительном коде. Так как вес старшего, т.е. значащего разряда в данном случае равен –2n-1, а не +2n-1, как в прямом коде, то диапазон представления чисел охватывает значения от –2n-1 до +2n-1-1.

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

Множимое Множитель Произведение

Другими словами, процедура умножения сводится к записи 0, если разряд множителя равен 0, или 1, если разряд =1.

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

Для деления чисел со знаком в дополнительном коде существует несколько методов. Простейший из них - преобразование чисел в положительные с последующим восстановлением знака результата. При наладке аппаратных средств (программ BIOS и т.д.) и написании новых программ (особенно на языках низкого уровня типа ассемблера) часто возникает необходимость заглянуть в память машины, чтобы оценить ее текущее состояние. Но там все заполнено длинными последовательностями нулей и единиц, очень неудобных для восприятия. Кроме того, естественные возможности человеческого мышления не позволяют оценить быстро и точно величину числа, представленного, например, комбинацией из 16 нулей и единиц. Для облегчения восприятия двоичного числа решили разбить его на группы разрядов, например, по три или четыре разряда. Эта идея оказалась удачной, так как последовательность из 3 бит имеет 8 комбинаций, а последовательность из 4 бит - 16 комбинаций. Числа 8 и 16 - степени двойки, поэтому легко находить соответствие между двоичными числами. Развивая эту идею, пришли к выводу, что группы разрядов можно закодировать, сократив при этом последовательность знаков. Для кодировки трех битов (триад) требуется 8 цифр, и поэтому взяли цифры от 0 до 7 десятичной системы. Для кодировки четырех битов (тетрад) необходимо 16 знаков, и взяли 10 цифр десятичной системы и 6 букв латинского алфавита: A, B, C, D, E, F. Полученные системы, имеющие в основании 8 и 16, назвали соответственно восьмеричной и шестнадцатеричной.

Десятичное Восьмеричное Триады Шестнадцатеричное Тетрада
000 000
000 001
000 010
000 011
000 100
000 101
000 110
000 111
001 000
001 001
001 010
001 011 A
001 100 B
001 101 C
001 110 D
001 111 E
010 000 F 1 0000

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

16-pазpядное двоичное число со знаковым разрядом можно представить 6-pазpядным восьмеричным, причем старший байт в нем будет принимать значения лишь 0 или 1. В шестнадцатеричной системе такое число займет 4 разряда.

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

1100 0011 1101 0110 1 100 011 111 010 110

C 3 D 6 1 4 1 7 2 6

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

Также просто осуществляется и обратное преобразование. Для этого каждую цифру восьмеричного или шестнадцатеричного числа заменяют группой из 3 или 4 бит.

Например:

A B 5 1 1 7 7 2 0 4

1010 1011 0101 0001 1 111 111 010 000 100

Арифметические операции над числами в восьмеричной или шестнадцатеричной системах проводятся по тем же правилам, что и в десятичной системе. Только надо помнить, что если имеет место перенос, то он производится не после 10, а после 8 или 16.

Например:

C 0A 5

+ 2 4 8 6

 
 


E 5 2 B

 


перенос

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

212 2

212 106 2

0 106 53 2

0 52 26 2

1 26 13 2

0 0 12 6 2

1 6 3 2

0 2 1 (старший разряд)

21210 = 110101002

А теперь переведем десятичное число 31318 в восьмеричную систему:

31318 8

31312 3914 8

6 3912 489 8

2 488 61 8

1 56 7 (старший разряд)

5

3131810 = 751268

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

2638 16 0.7516=12

2624 164 16

14 160 10 (старший разряд целой части)

2638.7510 = A4E.C16



<== предыдущая лекция | следующая лекция ==>
Двоичная система счисления | Представление информации в форме с фиксированной и плавающей точкой


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.313 сек.