1 2 3 Bog’liq
1 2 3 Ma’lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir. org 2023 | Bosh sahifa Ishdan maqsad fanidan mustaqil sog’liqni saqlash uzbekistan coronavirus respublikasi sog’liqni coronavirus covid vazirligi koronavirus koronavirus covid qarshi emlanganlik covid vaccination risida sertifikat sertifikat ministry vaccination certificate haqida umumiy o’rta ta’lim matematika fakulteti fanlar fakulteti pedagogika universiteti ishlab chiqarish moliya instituti fanining predmeti |
Лекция 5 — Информатика и ИКТ
Тема: Логические основы компьютера.
1. Основы логики.
Логика – наука о законах и формах мышления.
Высказывание (суждение) – некоторое предложение, которое может быть истинно (верно) или ложно.
Утверждение – суждение, которое требуется доказать или опровергнуть.
Рассуждение – цепочка высказываний или утверждений, определенным образом связанных друг с другом.
Умозаключение – логическая операция, в результате которой из одного или нескольких данных суждений получается (выводится) новое суждение.
Логическое выражение – запись или устное утверждение, в которое, наряду с постоянными, обязательно входят переменные величины (объекты). В зависимости от значений этих переменных логическое выражение может принимать одно из двух возможных значений: ИСТИНА (логическая 1) или ЛОЖЬ (логический 0).
Сложное логическое выражение – логическое выражение, составленное из одного или нескольких простых (или сложных) логических выражений, связанных с помощью логических операций.
2. Логические элементы компьютера. Схемы логических элементов и их таблицы истинности.
Как при строительстве дома применяют различного рода типовые блоки – кирпичи, рамы, двери и т.п., так и при разработке компьютера используют типовые электронные схемы. Каждая схема состоит из определенного набора типовых электронных элементов.
Электронным элементом называется соединение различных деталей, в первую очередь – диодов и транзисторов, а также резисторов и конденсаторов, в виде электрической схемы, выполняющей некоторую простейшую функцию.
Электронный элемент, реализующий логическую функцию, называется логическим элементом.
Логический элемент компьютера – это часть электронной логической схемы, которая реализует элементарную логическую функцию.
Тысячи микроскопических электронных переключателей в кристалле интегральной схемы сгруппированы в системы, выполняющие логические операции, т. е. операции с предсказуемыми результатами, и арифметические операции над двоичными числами. Соединенные в различные комбинации, логические элементы дают возможность компьютеру решать задачи, используя язык двоичных кодов.
Логическими элементами компьютеров являются электронные схемы И, ИЛИ, НЕ, И-НЕ, ИЛИ-НЕ и др. (называемые также вентилями), а также триггер, регистр, сумматор.
Триггер – это логическая схема, способная сохранять одно из двух состояний до подачи нового сигнала на вход. Это, по сути, разряд памяти, способный хранить 1 бит информации.
Регистр – это устройство, состоящее из последовательности триггеров. Регистр предназначен для хранения многоразрядного двоичного числового кода, которым можно представлять и адрес, и команду, и данные.
Сумматор – это устройство, предназначенное для суммирования двоичных кодов.
С помощью этих схем можно реализовать любую логическую функцию, описывающую работу устройств компьютера.
Чтобы представить два логических состояния «1» и «0» в вентилях, соответствующие им входные и выходные сигналы имеют один из двух установленных уровней напряжения. Например, +5 вольт и 0 вольт.
Высокий уровень обычно соответствует значению «истина» («1»), а низкий – значение «ложь («0»).
Каждый логический элемент имеет свое условное обозначение, которое выражает его логическую функцию, но не указывает на то, какая именно электронная схема в нем реализована. Это упрощает запись и понимание сложных логических схем.
Работу логических элементов описывают с помощью таблиц истинности.
Таблица истинности – это табличное представление логической схемы (операции), в котором перечислены все возможные сочетания значений истинности входных сигналов (операндов) вместе со значениями истинности выходного сигнала (результата операции) для каждого из этих сочетаний.
Логические операции и таблицы истинности
Табл. 9. Логическое умножение
A |
B |
F |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
F = A & B.
Логическое умножение КОНЪЮНКЦИЯ — это новое сложное выражение будет истинным только тогда, когда истинны оба исходных простых выражения. Конъюнкция определяет соединение двух логических выражений с помощью союза И.
Табл.10. Логическое сложение
A |
B |
F |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
F = A + B
Логическое сложение – ДИЗЪЮНКЦИЯ — это новое сложное выражение будет истинным тогда и только тогда, когда истинно хотя бы одно из исходных (простых) выражений. Дизъюнкция определяет соединение двух логических выражений с помощью союза ИЛИ.
Табл.11. Инверсия
A |
неА |
1 |
1 |
1 |
0 |
Логическое отрицание: ИНВЕРСИЯ — если исходное выражение истинно, то результат отрицания будет ложным, и наоборот, если исходное выражение ложно, то результат отрицания будет истинным/ Данная операция означает, что к исходному логическому выражению добавляется частица НЕ или слова НЕВЕРНО, ЧТО
Табл.12. Импликация
A |
B |
F |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
Логическое следование: ИМПЛИКАЦИЯ — связывает два простых логических выражения, из которых первое является условием (А), а второе (В)– следствием из этого условия. Результатом ИМПЛИКАЦИИ является ЛОЖЬ только тогда, когда условие А истинно, а следствие В ложно. Обозначается символом «следовательно» и выражается словами ЕСЛИ … , ТО …
Порядок выполнения логических операций в сложном логическом выражении:
1. инверсия
2. конъюнкция
3. дизъюнкция
4. импликация
5. эквивалентность
3. Электронно-логические схемы триггера и сумматора.
Триггер – это электронная схема, широко применяемая в регистрах компьютера для надежного запоминания одного разряда двоичного кода. Триггер имеет два устойчивых состояния, одно из которых соответствует двоичной единице, а другое – двоичному нулю.
Термин «триггер» происходит от английского слова trigger – защелка, спусковой крючок. Для обозначения этой схемы в английском языке чаще употребляется термин flip – flop, что в переводе означает «хлопанье». Это звукоподражательное название электронной схемы указывает на ее способность почти мгновенно переходить из одного электрического состояния в другое и наоборот.
Самый распространенный тип триггера – так называемый RS – триггер ( S и R соответственно от английских слов set – установка и reset – сброс). Условное обозначение триггера – на рис.5. Он имеет два симметричных входа S и R и два симметричных выхода Q и , причем выходной сигнал Q является логическим отрицанием сигнала . На каждый из двух входов S и R могут подаваться входные сигналы в виде кратковременных импульсов. Наличие импульса на входе будем считать единицей, а его отсутствие – нулем.
Рис. 5. Реализация триггера с помощью вентилей ИЛИ-НЕ
Табл.13. Реализация триггера с помощью вентилей ИЛИ-НЕ
S |
R |
Q |
|
0 |
0 |
Запрещено | |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
Хранение бита |
Проанализируем возможные комбинации значений входов R и S триггера, используя его схему и таблицу истинности схемы ИЛИ-НЕ (см. табл. 13).
1. Если на входы триггера подать S = «1», R = «0», то (независимо от состояния) на выходе Q верхнего вентиля появится «0». После этого на входах нижнего вентиля окажется R = «0», Q = «0» и выход станет равным «1».
2. Точно так же при подаче «0» на вход S и «1» на вход R на выходе появится «0», а на Q – «1».
3. Если на входы S и R подана логическая «1», то состояние Q и не меняется.
4. Подача на оба входа R и S логического «0» может привести к неоднозначному результату, поэтому эта комбинация входных сигналов запрещена.
Поскольку один триггер может запомнить только один разряд двоичного кода, то для запоминания байта нужно 8 триггеров, для запоминания килобайта соответственно 8*210=8192 триггеров. Современные микросхемы памяти содержат миллионы триггеров.
Сумматор — это электронная логическая схема,выполняющая суммирование двоичных чисел. Сумматор служит прежде всего центральным узлом арифметико–логического устройства компьютера, однако он находит применение также и в других устройствах машины.
Многоразрядный двоичный сумматор, предназначенный для сложения многоразрядных двоичных чисел, представляет собой комбинацию одноразрядных сумматоров, с рассмотрения которых мы и начнем. Условное обозначение одноразрядного сумматора приведено на рис. 8.
Одноразрядный двоичный сумматор есть устройство с тремя входами и двумя выходами, работа которого может быть описана следующей таблицей истинности – табл.14.
Табл. 14. Схема полусумматора.
Входы |
Выходы | |||
Первое слагаемое |
Второе слагаемое |
Перенос |
Сумма |
Перенос |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
Если требуется складывать двоичные слова длиной два и более бит, то можно использовать последовательное соединение таких сумматоров, причем для двух соседних сумматоров выход переноса одного сумматора является входом для другого.
C++ — Должен ли я использовать логический тип для переменной без ответа «да/нет»?
спросил
Изменено 6 лет, 3 месяца назад
Просмотрено 2к раз
Я программировал с группой начинающих C++, и мы создавали класс «Автомобиль». Кто-то предложил «тип шины» в качестве возможной переменной/атрибута класса как логического типа. Затем другой человек спросил, должны ли логические значения отвечать непосредственно да/нет.
Мне просто интересно то же самое. Как вам лучше всего управлять этой переменной и как позже указать две опции, такие как зима/лето, для этой переменной?
5
Ну, это зависит.
Ваша цель — писать понятный, читаемый, удобный и правильный код. Дело не столько в том, что bool
требует ответа «да» или «нет», сколько в том, поможет ли вам использование логического значения (или любого другого типа, если на то пошло) достичь этих целей. Если это делает ваш код понятным, стоит подумать. Если это сбивает с толку, это не очень хорошая идея.
Например, у вас может быть только два типа шин, но учтите пару вещей:
- Откуда вы знаете, что не добавите больше позже? Вы же не хотите выстрелить себе в ногу.
- При написании/чтении кода как запомнить, что
true
«лето», аfalse
«зима»? Придется ли вам держать эту информацию в голове/всегда искать ее где-нибудь? Легко ли будет ошибиться? Не запутает ли это читателя, не знакомого с вашим кодом?
Подумайте о таких вещах. В вашем случае, хотя использование логического значения, безусловно, выполнит свою работу, я бы сказал, что это хорошее использование для перечисления
, даже если у вас есть только два значения прямо сейчас (или когда-либо). Например:
enum TireType {WinterTire, SummerTire};
Теперь все встало на свои места:
- Вы можете добавить новые типы в будущем, если хотите, без особых проблем.
- Переменная
TireType t
документирует себя, мы сразу знаем, чтоt
— это тип шины. - Вероятность ошибки при вводе значений значительно меньше: будет очень сложно спутать
WinterTire
сSummerTire
, тогда какtrue
иfalse
отбрасывают все семантическое значение.
5
У логического значения есть два параметра, но эти параметры — «истина» или «ложь» (или, иногда, «да» и «нет»).
Обычно мы не представляем другие переменные с двумя параметрами как логические.
Если у вас есть типы шин (которых в настоящее время два), я бы предложил для этого enum
s.
Как всегда есть исключения. Если вашими типами шин являются «шина с маслом на ней» и «шина без масла на ней», вы можете использовать логическое значение с именем tyreHasOilOnIt
.
Действительно, решать вам.
Логический тип обычно представляет собой значение, имеющее ровно два значения, одно из которых истинно, а другое — ложно. Это может в некоторой степени быть согнуто в другие значения. В вашем случае, когда я увидел обсуждение типа шины, я понятия не имел, что означают эти два значения, пока не прочитал комментарии.
На мой взгляд, когда значение не говорит само за себя, я бы не стал использовать логическое значение.
В вашем случае, если типы шин известны на момент написания программы, я бы использовал какое-то перечисление
, а если они неизвестны, просто простую строку.
2
Я бы посоветовал не использовать тип enum или bool для типа шины, поскольку возможная переменная/атрибут может измениться, как вы указали yes/no или Winter/Summer . Лучше использовать его как короткий int, значения которого вы можете отслеживать или отображать в отношении да, нет, зимы, лета. Это позволит вам назначать или изменять в соответствии с вашими потребностями, и класс никогда не потребует изменений.
Пример: Автомобиль класса { // мы будем использовать тип шины для сопоставления перечисления // тип и другой тип, если требуется
тип шины int;
}; перечисление tyre_type_t { //значение по умолчанию считается 100 // так как мы можем использовать предыдущий // значение любой другой цели. ЗИМА = 100, ЛЕТОМ } основной () { Объект автомобиля; obj.tyreType = 1; // Да obj.tyreType = 0; // Нет obj.tyreType = ЗИМА; // Теперь мы можем назначить enum. // значения // тоже. вернуть 0; }
Счастливое кодирование
2
Пример: Автомобиль класса { // мы будем использовать тип шины для сопоставления перечисления // тип и другой тип, если требуется
тип шины int;
}; перечисление tyre_type_t { //значение по умолчанию считается 100 // так как мы можем использовать предыдущий // значение любой другой цели. ЗИМА = 100, ЛЕТОМ } основной () { Объект автомобиля; obj.tyreType = 1; // Да obj.tyreType = 0; // Нет obj.tyreType = ЗИМА; // Теперь мы можем назначить enum. // значения // тоже. вернуть 0; }
Счастливое кодирование
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя адрес электронной почты и пароль
Опубликовать как гость
Электронная почта
Обязательно, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
python — False или None vs.
None или FalseОБЪЯСНЕНИЕ
Вы должны понимать, что True
, False
и None
— все это синглтоны в Python, что означает, что существует и может существовать только один , единственный экземпляр объекта singleton, отсюда и название single ton. Кроме того, вы не можете изменить одноэлементный объект, потому что его состояние заложено в камне, если я могу использовать эту фразу.
Теперь позвольте мне объяснить, как должны использоваться эти синглтоны Python.
Пусть объект Python с именем foo
имеет значение None
, затем , если foo не None
, говорит, что foo
имеет значение, отличное от None
. Это работает так же, как if foo
, что в основном равно if foo == True
.
Итак, not None
и True
работают так же, как и None
и False
.
>>> foo = нет Нет >>> бул(фу) Истинный >>> foo = 5 # Здесь задается произвольное значение >>> бул(фу) Истинный >>> foo = нет >>> бул(фу) ЛОЖЬ >>> foo = 5 # Здесь задается произвольное значение >>> бул(фу) Истинный
Критически важно осознавать и учитывать при кодировании то, что при сравнении двух объектов Нет
нужно равно
, но True
и False
нужно ==
. Избегайте использования , если foo == None
, используйте , только если foo равно None
. Кроме того, избегайте использования , если foo != None
, и используйте , только если foo не None
.
ПРЕДУПРЕЖДЕНИЕ
Если вы используете , если foo
или , если не foo
, когда значение foo
оказывается None
, остерегайтесь потенциальных ошибок в вашем коде. Таким образом, не проверяйте потенциальное значение None
в условных операторах.