Главная страница
Навигация по странице:

  • Двоичное число Десятичное число

  • ИЛИ-НЕ 0 1 0 1 01

  • кр гаряев. Чарльз Петцольд - Код_ тайный язык информатики-Манн, Иванов и Фе. Книга принадлежит Контакты владельца Культовая книга талантливого преподавателя стала для многих первым уверенным шагом в программировании


    Скачать 6.11 Mb.
    НазваниеКнига принадлежит Контакты владельца Культовая книга талантливого преподавателя стала для многих первым уверенным шагом в программировании
    Анкоркр гаряев
    Дата19.10.2022
    Размер6.11 Mb.
    Формат файлаpdf
    Имя файлаЧарльз Петцольд - Код_ тайный язык информатики-Манн, Иванов и Фе.pdf
    ТипКнига
    #743064
    страница10 из 28
    1   ...   6   7   8   9   10   11   12   13   ...   28
    Искл-ИЛИ 0
    1
    0
    0 1
    1
    1 0
    Если сигнал «Инверсия» равен 0, то сигналы на восьми выходах венти- лей Искл-ИЛИ совпадают с сигналами на их входах. Например, если на вход подается значение 01100001, то выходным значением также является 01100001.
    Если сигнал «Инверсия» равен 1, то восемь входных сигналов будут инверти- рованы. Если на вход подается значение 01100001, то выходное — 10011110.
    Давайте поместим эти восемь вентилей Искл-ИЛИ в прямоугольник под названием «Дополнение до единицы».
    Инверсия
    Дополнение до единицы
    Вх
    7
    Вх
    6
    Вх
    5
    Вх
    4
    Вх
    3
    Вх
    2
    Вх
    1
    Вх
    0
    Вых
    7
    Вых
    6
    Вых
    5
    Вых
    4
    Вых
    3
    Вых
    2
    Вых
    1
    Вых
    0
    Теперь устройство для дополнения числа до единицы, 8-битный сумматор и последний вентиль Искл-ИЛИ можно объединить в схему.

    Глава 13. А как насчет вычитания?
    169
    Выч.
    Выч.
    CO
    8-битный сумматор
    CI
    Вход А
    Вход B
    A
    7
    ... A
    0
    B
    7
    ... B
    0
    S
    7
    ... S
    0
    Выход для суммы
    Инверсия
    Дополнение до единицы
    Выч.
    Переполнение/
    Исчезновение
    Обратите внимание на три сигнала, обозначенные как «Выч.». Они по- ступают от переключателя «Сложение/вычитание». Этот сигнал равен 0, если необходимо выполнить сложение, и 1, если вычитание. При вычитании сигна- лы на входах B (второй ряд переключателей) инвертируются схемой «Допол- нение до единицы» перед попаданием в сумматор. Кроме того, при вычитании к результату сложения прибавляется 1 за счет подачи на вход сумматора CI
    (вход для переноса) значения 1. При сложении схема «Дополнение до едини- цы» не оказывает никакого эффекта, а вход CI равен 0.
    Сигнал «Выч.» и выходной сигнал сумматора CO (выход для переноса) также подаются на вход вентиля Искл-ИЛИ, который используется для вклю- чения лампочки «Переполнение/Исчезновение». Если сигнал «Выч.» равен 0
    (выполняется сложение), лампочка будет гореть при выходном сигнале сум- матора CO, равном 1. Это означает, что результат сложения превышает 255.
    При выполнении вычитания, когда вычитаемое (переключатели B) мень- ше уменьшаемого (переключатели A), выходной сигнал сумматора CO бывает равен 1. Это нормально и означает, что на последнем этапе необходимо вы- честь 100000000. Таким образом, лампа «Переполнение/Исчезновение» горит только тогда, когда выход сумматора CO равен 0, то есть вычитаемое больше уменьшаемого и результат отрицательный. Описанная выше машина не пред- назначена для отображения отрицательных чисел.
    Сейчас вы, вероятно, рады, что спросили: «А как насчет вычитания?»
    В этой главе я говорил об отрицательных числах, но все еще не показал, как выглядят отрицательные двоичные числа. Вы можете предположить, что

    170
    Код традиционный знак «–» используется с двоичными числами так же, как и с де- сятичными. Например, число –77 в двоичном формате записывается –1001101.
    Конечно, вы можете так его записать, однако одна из целей использования двоичных чисел заключается в том, чтобы представлять всё с помощью ну- лей и единиц, включая такие символы, как «–» перед отрицательным числом.
    Можно просто использовать еще один бит для знака «–». Его значение 1 может соответствовать отрицательному числу, а 0 — положительному, и это будет работать, хотя мало что даст. Существует еще одно решение для представ- ления отрицательных чисел, которое также предусматривает простой способ сложения отрицательных и положительных чисел. Недостаток этого метода — необходимость заранее решить, сколько цифр требуется для представления чисел, с которыми мы будем работать.
    Давайте подумаем. Преимущество обычного способа представления положительных и отрицательных чисел заключается в том, что они могут иметь бесконечную длину. Мы представляем 0 как точку, от которой в одну сторону в бесконечность уходят положительные числа, а в другую — от- рицательные.
    … –1 000 000 –999 999 … –3 –2 –1 0 1 2 3 … 999 999 1 000 000 …
    Однако представьте, что нам не нужно бесконечное количество чисел: с самого начала известно, что каждое число, которое встретится, будет нахо- диться в определенном диапазоне.
    Рассмотрим чековый банковский счет, в котором мы иногда сталкиваем- ся с отрицательными числами. Предположим, что баланс нашего счета нико- гда не превышал 500 долларов, и банк установил лимит перерасхода на те же
    500 долларов. Это значит, что баланс нашего счета всегда находится в диапа- зоне от 499 до –500 долларов. При этом мы никогда не кладем на счет более
    499 долларов, никогда не выписываем чек на сумму более 500 долларов и име- ем дело только с долларами, центы же не учитываем.
    Этот набор условий указывает, что при использовании нашего счета мы имеем дело с числами в диапазоне от –500 до 499. Это всего 1000 чисел.
    Такое ограничение подразумевает, что для представления всех нужных чисел мы должны использовать только три десятичные цифры и обходиться без знака «–». Хитрость в том, что нам не нужны положительные числа от 500 до 999, поскольку мы уже решили, что максимальным положительным чис- лом для нас является 499. Таким образом, трехзначные числа от 500 до 999 фактически можно использовать для представления отрицательных чисел.
    Вот как это работает.

    Глава 13. А как насчет вычитания?
    171
    Вместо –500 используем 500.
    Вместо –499 используем 501.
    Вместо –498 используем 502.

    Вместо –2 используем 998.
    Вместо –1 используем 999.
    Вместо 0 используем 000.
    Вместо 1 используем 001.
    Вместо 2 используем 002.

    Вместо 497 используем 497.
    Вместо 498 используем 498.
    Вместо 499 используем 499.
    Другими словами, каждое трехзначное число, которое начинается с циф- ры 5, 6, 7, 8 или 9, фактически является отрицательным. Вместо того чтобы записывать эти числа как:
    –500 –499 –498 … –4 –3 –2 –1 0 1 2 3 4 … 497 498 499,
    запишем их:
    500 501 502 … 996 997 998 999 000 001 002 003 004 … 497 498 499.
    Обратите внимание: числа идут по кругу. Наименьшее отрицательное чис- ло (500) как бы следует за наибольшим положительным числом (499). А число
    999 (которое фактически равно –1) на единицу меньше нуля. Если мы приба- вим 1 к 999, то в обычных условиях получим 1000. Но поскольку мы имеем дело только с тремя цифрами, в результате будет 000.
    Такой способ записи отрицательных чисел называется дополнением до де-
    сяти. Чтобы преобразовать трехзначное отрицательное число в дополнение до десяти, вычитаем его из 999 и прибавляем 1. Другими словами, дополнение до десяти — это дополнение до девяти плюс один. Например, чтобы найти до- полнение числа –255 до десяти, нужно вычесть его из 999, получив 744, а затем прибавить 1, что в результате даст 745.
    Вероятно, вы слышали утверждение, что вычитание — это просто при- бавление отрицательных чисел. На что вы, вероятно, отвечали: «Да, но числа все равно приходится вычитать». Используя дополнение до десяти, вы вооб- ще ничего не вычитаете. Все сводится к сложению.
    Предположим, у вас на счету 143 доллара. Вы выписываете чек на 78 дол- ларов. Это означает, что вы должны прибавить –78 к 143. Дополнение числа
    –78 до десяти равно 999 – 078 + 1, то есть 922. Таким образом, ваш баланс те- перь составляет 143 + 922, или 65 долларов (без учета переполнения). Если пос ле этого вы выпишете чек на 150 долларов, придется прибавить число –150,

    172
    Код дополнение которого до десяти равно 850. Итак, прибавим 850 к предыдуще- му балансу 065 и получим 915 — новый баланс. Это число фактически экви- валентно –85.
    В двоичном формате подобная система называется дополнением до двух.
    Предположим, что мы работаем с 8-битными числами в диапазоне от 00000000 до 11111111, которые соответствуют десятичным числам от 0 до 255. Если вам требуется использовать отрицательные числа, то каждое 8-битное число, на- чинающееся с 1, фактически будет отрицательным:
    Двоичное число
    Десятичное число
    10000000
    –128 10000001
    –127 10000010
    –126 10000011
    –125


    11111101
    –3 11111110
    –2 11111111
    –1 00000000 0
    00000001 1
    00000010 2


    01111100 124 01111101 125 01111110 126 01111111 127
    Теперь вы можете представить числа в диапазоне от –128 до +127. Стар- ший значащий бит (крайний слева) называется знаковым разрядом. Знаковый разряд равен 1 для отрицательных чисел и 0 — для положительных.
    Чтобы вычислить дополнение числа до двух, сначала вычислите его до- полнение до единицы, а затем прибавьте 1. Это эквивалентно инвертирова- нию всех цифр и прибавлению 1. Например, десятичное число 125 в двоичном формате выражается как 01111101. Чтобы выразить число –125 в виде допол- нения до двух, сначала инвертируем цифры 01111101 для получения 10000010, а затем прибавим 1, в результате чего получим 10000011. Вы можете проверить результат по приведенной выше таблице. Для выполнения обратной операции повторите те же действия — инвертируйте все биты и прибавьте 1.
    Эта система позволяет выражать положительные и отрицательные числа, не используя знак «–». Кроме того, с ее помощью можно складывать положи- тельные и отрицательные числа, руководствуясь только правилами сложения.
    Например, сложим двоичные эквиваленты чисел –127 и 124. Это просто, если использовать в качестве шпаргалки предыдущую таблицу.

    Глава 13. А как насчет вычитания?
    10000001

    01111100 11111101
    Результат эквивалентен числу –3 в десятичной системе счисления.
    В данном случае нужно следить за условиями переполнения и исчез- новения разряда. Такое может произойти, когда в результате сложения по- лучается число больше 127 или меньше –128. Например, вы прибавляете
    125 к 125.
    01111101

    01111101 11111010
    Поскольку старший бит равен 1, результат следует интерпретировать в ка- честве отрицательного числа, которое соответствует –6 в десятичной системе счисления. Что-то подобное происходит и при сложении чисел –125 и –125.
    10000011

    10000011 100000110
    С самого начала мы решили ограничиться 8-битными числами, поэтому необходимо проигнорировать крайнюю левую цифру. Правые восемь бит эк- вивалентны числу +6.
    Вообще, результат сложения положительных и отрицательных чисел не яв- ляется верным, если знаковые разряды двух операндов одинаковы, а знаковый разряд результата отличается.
    Теперь у нас есть два разных способа использования двоичных чисел.
    Двоичное число может быть со знаком (знаковым) или без знака (беззнаковым).
    Восьмибитные числа без знака находятся в диапазоне от 0 до 255, 8-битные числа со знаком — в диапазоне от −128 до 127. По самим числам невозмож- но понять, сопровождаются они знаком или нет. Например, кто-то говорит:
    «У меня есть 8-битное двоичное число, значение которого равно 10110110. Ка- ков его десятичный эквивалент?» Сначала вы должны спросить: «Это число со знаком или без знака? В зависимости от этого ответом может быть либо число –74, либо 182».
    В этом и состоит проблема с битами: они всего лишь нули и единицы, ко- торые ничего не говорят о себе.

    174
    Глава 14
    Обратная связь и триггеры
    Известно, что электричество приводит предметы в движение. Оглядевшись по сторонам в обычном доме, можно увидеть электрические двигатели в раз- личных устройствах, например в часах, вентиляторах, кухонных комбайнах, проигрывателях компакт-дисков. Электричество также заставляет вибриро- вать конусы в динамиках, благодаря чему стереосистемы и телевизоры вос- производят звуки, речь и музыку. Однако самый простой и изящный пример того, как электричество приводит предметы в движение, вероятно, иллюстри- руется классом устройств, которые быстро исчезают по мере их замены элект- ронными аналогами. Я имею в виду уже ставшие раритетом электрические зуммеры и звонки.
    Рассмотрим реле, соединенное с переключателем и батарейкой следую- щим образом.
    Неудивительно, если эта схема кажется немного странной. Мы еще не встре- чались с таким способом подключения. Обычно реле подключается так, что вход отделен от выхода. Здесь все закольцовано. Замыкание переключателя делает цепь непрерывной.

    Глава 14. Обратная связь и триггеры
    175
    Ток в замкнутой цепи заставляет электромагнит притягивать гибкую полоску.
    Когда полоска меняет свое положение, цепь размыкается, поэтому электро- магнит теряет свои магнитные свойства, а полоска возвращается на свое место.
    А это, конечно же, снова замыкает схему. Происходит следующее: до тех пор, пока переключатель замкнут, металлическая полоска двигается назад и вперед, поочередно замыкая и размыкая цепь, что, скорее всего, сопровож- дается звуком. Устройство, издающее дребезжащий звук, называется зумме- ром. Если вы присоедините к нему молоточек и разместите рядом чашечку, появится электрический звонок.

    176
    Код
    Чтобы сделать зуммер, можно выбрать один из двух способов подключе- ния этого реле. Вот еще одна схема подключения с общепринятыми символа- ми для обозначения источника питания и земли.
    V
    Возможно, в этой схеме вы узнали инвертор, описанный в главе 11, по- этому ее можно изобразить проще.
    Выход
    Как вы помните, выход инвертора — 1, если вход — 0, и выход — 0, если вход — 1. Замыкание переключателя в этой цепи приводит к поочередному размыканию и замыканию реле в инверторе. Постоянную работу инвертора может обеспечить и схема без переключателя.
    Выход
    Может показаться, что эта иллюстрация противоречит логике, поскольку выход инвертора должен располагаться напротив входа, однако в данном слу- чае выход является входом! Имейте в виду, что инвертор на самом деле просто реле, которому требуется немного времени для перехода из одного состояния в другое. Так что даже если вход равен выходу, вскоре выход станет противо- положен входу (что, конечно, приведет к изменению входного сигнала и т. д.).
    Чему равен выход этой цепи? Его значение быстро меняется между на- личием и отсутствием напряжения. Можно сказать, значение выхода быстро
    чередуется между 0 и 1.
    Такая цепь называется осциллятором. По сути она отличается от всех устройств, которые мы рассматривали ранее. Все виденные нами схемы изменяли свое со- стояние только при вмешательстве человека, который замыкал и размыкал пере- ключатель. Однако осциллятор не нуждается в человеке, он работает сам по себе.

    Глава 14. Обратная связь и триггеры
    177
    Разумеется, в отрыве от окружения осциллятор не очень полезен. Далее в этой и последующих главах мы увидим, что такая схема, подключенная к другим схе- мам, является важной частью автоматизации. Во всех компьютерах присутству- ет некий осциллятор, обеспечивающий синхронную работу остальных частей.
    Значение выхода осциллятора чередуется между 0 и 1. Часто этот факт изоб ражается с помощью диаграммы.
    Эту диаграмму можно воспринимать как график, по горизонтальной оси которого отложено время, а по вертикальной — выходные значения 0 и 1.
    Время
    0 1
    Все это говорит о том, что с течением времени выходное значение ос- циллятора регулярно изменяется с 0 на 1. По этой причине осциллятор иног- да называют часами, поскольку он позволяет определить время: достаточно подсчитывать количество колебаний.
    Как быстро будет работать осциллятор? Насколько быстро будет вибри- ровать металлический контакт реле? Сколько раз в секунду? Очевидно, это зависит от конструкции реле. Легко представить большое, неуклюжее реле, которое медленно замыкает и размыкает контакт, и небольшое легкое реле с быстро вибрирующим контактом.
    Цикл осциллятора — интервал, в течение которого его выход изменяется, после чего возвращается к исходному значению.
    Один цикл
    Время
    0 1
    Время, которое занимает один цикл, называется периодом осциллятора.
    Предположим, период нашего осциллятора равен 0,05 секунды. Вдоль гори- зонтальной оси мы можем отложить время в секундах начиная с некоторого произвольно выбранного нулевого момента.
    Время, с
    Один цикл
    0 0,025 0,05 0,075 0,10 0,125 0,15 0
    1

    178
    Код
    Частота осциллятора равна единице, поделенной на период. В дан- ном примере, если период осциллятора составляет 0,05 секунды, его частота
    1 / 0,05 = 20 колебаний в секунду. Выход осциллятора изменяется и возвраща- ется к исходному значению 20 раз в секунду.
    Количество колебаний в секунду — такой же логичный термин, как количе-
    ство километров в час, килограммов на квадратный метр или калорий на пор-
    цию, однако он больше не используется. В память о Генрихе Рудольфе Герце
    (1857–1894), который первым передал и принял радиоволны, говорят «герц».
    Сначала это слово начали применять в Германии в 1920-х годах, а затем за не- сколько десятилетий термин прижился и в других странах.
    Таким образом, можно сказать, что наш осциллятор имеет частоту 20 герц, или 20 Гц (сокращенно).
    Конечно, мы произвольно указали частоту одного конкретного осцилля- тора. В конце этой главы мы сможем соорудить то, что позволит фактически измерить данный параметр.
    Чтобы начать работу над этим устройством, давайте рассмотрим пару вен- тилей ИЛИ-НЕ, соединенных определенным образом. Вероятно, вы помните, что на выходе вентиля ИЛИ-НЕ есть напряжение, только если напряжения нет ни на одном из его входов.
    ИЛИ-НЕ
    0
    1
    0
    1 0
    1
    0 0
    Вот схема с двумя вентилями ИЛИ-НЕ, двумя переключателями и лам- почкой.
    V
    V
    Обратите внимание на необычную схему проводки: выход левого венти- ля ИЛИ-НЕ — это вход правого вентиля ИЛИ-НЕ, а выход правого вентиля
    ИЛИ-НЕ — вход левого вентиля ИЛИ-НЕ. Такое соединение называется обрат-
    ной связью. Действительно, как и в случае с осциллятором, выход становится

    Глава 14. Обратная связь и триггеры
    179
    входом. Эта особенность будет характерна для большинства схем, приведен- ных в данной главе.
    Сначала ток в этой цепи будет течь только от выхода левого вентиля
    ИЛИ-НЕ. Это связано с тем, что оба входа данного вентиля равны 0. Теперь замкните верхний переключатель. Выход левого вентиля ИЛИ-НЕ становится равным 0, а это значит, что выход правого вентиля ИЛИ-НЕ равен 1, и лам- почка загорается.
    V
    V
    Волшебство наблюдается, когда вы размыкаете верхний переключатель.
    Поскольку выход вентиля ИЛИ-НЕ — 0, если один из входов — 1, выход ле- вого вентиля ИЛИ-НЕ не изменяется, и лампочка не гаснет.
    V
    V
    Не кажется ли вам это странным? Оба переключателя разомкнуты, как и на первом рисунке, однако теперь лампочка горит. Эта ситуация, безусловно, отличается от тех, что мы видели ранее. Обычно выход цепи зависит только от ее входов. Похоже, в данном случае это не так. Более того, на этом этапе вы можете замкнуть и разомкнуть верхний переключатель, и лампочка не погас- нет. Этот переключатель больше не влияет на цепь, поскольку выход левого вентиля ИЛИ-НЕ остается равным 0.
    Теперь замкните нижний переключатель. Поскольку один из входов пра- вого вентиля ИЛИ-НЕ равен 1, выход становится равным 0, лампочка гаснет.
    При этом выход левого вентиля ИЛИ-НЕ — 1.

    180
    Код
    V
    V
    Если вы разомкнете нижний переключатель, лампочка останется выклю- ченной.
    V
    V
    Мы вернулись туда, откуда начали. Теперь вы можете замкнуть и разо- мкнуть нижний переключатель, не повлияв на лампочку. Подытожим:
    ȣ при замыкании верхнего переключателя лампочка загорается и остается гореть при размыкании верхнего переключателя;
    ȣ при замыкании нижнего переключателя лампочка гаснет и не загорается при размыкании нижнего переключателя.
    Странность этой схемы заключается в том, что, когда оба переключате- ля разомкнуты, иногда лампочка горит, иногда — нет. Можно сказать, что эта схема имеет два устойчивых состояния, когда оба переключателя разомкнуты.
    Называется такая схема триггером, и его история началась в 1918 году с ра- боты английского радиофизика Уильяма Генри Эклза (1875–1966) и Фрэнка
    Джордана (о котором мало что известно).
    Триггер сохраняет информацию, «помнит». В частности, показанный ра- нее триггер помнит, какой переключатель был замкнут последним. Если вы столкнулись с таким триггером и видите, что лампочка горит, можете предпо- ложить, что последним был замкнут верхний переключатель; если лампочка не горит — нижний.
    Триггер похож на качели, которые имеют два устойчивых состояния, никогда подолгу не задерживаются в неустойчивом среднем положении. Глядя на каче- ли, вы всегда можете сказать, в какую сторону они качнулись в последний раз.

    Глава 14. Обратная связь и триггеры
    181
    Возможно, это не является очевидным, однако триггеры весьма полезны.
    Они обеспечивают память схемы, сохраняющую историю того, что произошло ранее. Представьте, что значит считать, не обладая памятью. В этом случае вы не знаете, какое число задумали, какое число следует к нему прибавить! Точ- но так же схема, которая производит подсчет (описанная далее), требует на- личия триггеров.
    Существуют два различных типа триггеров. Тот, что я показал выше, яв- ляется самым простым и называется RS-триггером (Reset/Set, сброс/установ- ка). Два вентиля ИЛИ-НЕ чаще всего изображаются и обозначаются так, как показано на диаграмме, для придания им симметричного вида.
    Q
    Q
    R
    S
    Выход, который мы использовали для лампочки, традиционно называет- ся Q (от английского quit — « выход»). Кроме того, существует второй выход Q
    ,
    который является электрически противоположным выходу Q, то есть инвер- сией Q. Если Q равен 0, то Q равен 1, и наоборот. Два входа, S и R, использу- ются для установки (set) и сброса (reset). Вы можете думать об этих действиях так: «установить значение Q на 1» и «сбросить значение Q на 0». Когда S рав- но 1 (что соответствует замыканию верхнего переключателя на приведенной раннее диаграмме), выход Q становится равным 1, а выход Q — 0. Когда R равен 1 (что соответствует замыканию нижнего переключателя на приведен- ной ранее диаграмме), выход Q становится равным 0, а выход Q — 1. Когда оба входа равны 0, выход указывает на то, являлось ли последним действием установка или сброс значения Q. Результаты работы этой схемы приведены в следующей таблице.
    1   ...   6   7   8   9   10   11   12   13   ...   28


    написать администратору сайта