Двоичная логика | это… Что такое Двоичная логика?
Двоичная логика
Двоичная логика (двузначная логика) — это логика, основанная на двух утверждениях. Истина (логическая единица) и ложь (логический нуль). Из-за простоты реализации получила широкое распространение в вычислительной технике. В вычислительной технике разделяют положительную (истина=1, ложь=0) и отрицательную (истина=0, ложь=1) логику.
В простейшей Булевой алгебре есть только два элемента, 0 и 1, и следующие операции:
Содержание
|
Нульарные
Нульарные операции суть константы. В двоичной логике ими являются логический нуль (0) и логическая единица (1).
Унарные
Инверсия (отрицание) — «¬», «НЕ», «НЕТ», f(1,1,01)2(x)=f(1,1,1)10(x)
X | НЕ X |
---|---|
0 | 1 |
1 | 0 |
Бинарные
Конъюнкция — «», «&», «И», f(2,1,8)10(x,y)
Дизъюнкция — «», «|», «ИЛИ», f(2,1,14)10(x,y).
|
|
Двоичный полусумматор
f(10,10,10000110)2(x,y)=f(2,2,134)10(x,y)
X | Y | S=X Y= f(2,1,06)10(x,y) | P=X&Y= f(2,1,08)10(x,y) | |
---|---|---|---|---|
0 | 0 | 0 | 0 | |
1 | 0 | 1 | 0 | |
0 | 1 | 1 | 0 | |
1 | 1 | 1 |
S — бит суммы по модулю 2
P — бит переноса в n+1 разряд
Двоичный полувычитатель
f(10,10,01000110)2(x,y)=f(2,2,70)10(x,y)
X | Y | R=X Y= f(2,1,06)10(x,y) | Z(N+1)= f(2,1,04)10(x,y) | |
---|---|---|---|---|
0 | 0 | 0 | 0 | |
1 | 0 | 1 | 0 | |
0 | 1 | 1 | 1 | |
1 | 1 | 0 | 0 |
R — бит разности по модулю 2
Z — бит займа из n+1 разряда
Тринарные
f(11,01,10000000)2(x,y,z)=f(3,1,128)10(x,y,z) и
f(11,01,11111110)2(x,y,z)=f(3,1,254)10(x,y,z)
|
|
Двоичный сумматор
f(11,10,1110100010010110)2(x,y,z)=f(3,2,59542)10(x,y,z)
X | Y | P(N-1) | S=X Y Z= f(3,1,150)10(x,y,z) | P(N+1)= f(3,1,232)10(x,y,z) |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 1 | 0 |
0 | 1 | 0 | 1 | 0 |
1 | 0 | 0 | 1 | |
0 | 0 | 1 | 1 | 0 |
1 | 0 | 1 | 0 | 1 |
0 | 1 | 1 | 0 | 1 |
1 | 1 | 1 | 1 | 1 |
Двоичный вычитатель
f(11,10,110100010010110)2(x,y,z)=f(3,2,55446)10(x,y,z)
X | Y | Z(N-1) | R=X Y Z= f(3,1,150)10(x,y,z) | Z(N+1)= f(3,1,216)10(x,y,z) |
---|---|---|---|---|
0 | 0 | 0 | 0 | |
1 | 0 | 0 | 1 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 0 | 0 | 0 |
0 | 0 | 1 | 1 | 1 |
1 | 0 | 1 | 0 | 0 |
0 | 1 | 1 | 0 | 1 |
1 | 1 | 1 | 1 | 1 |
Z(N-1) — бит займа в N-1 разряд, второе вычитаемое
Z(N+1) — бит займа из N+1 разряда
См.
также- Булевы функции
- Булева алгебра
- Битовые операции
- Двухуровневый элемент
- Комбинационная логика
- Логические элементы
- Секвенциальная логика
- Троичная логика
- Семиричная логика
Ссылки
- http://alpha3300.karelia.ru/koi/posob/log_basis/vichet.html Логические основы ЭВМ. Двоичное вычитание
Двоичная логика | это… Что такое Двоичная логика?
Двоичная логика
Двоичная логика (двузначная логика) — это логика, основанная на двух утверждениях. Истина (логическая единица) и ложь (логический нуль). Из-за простоты реализации получила широкое распространение в вычислительной технике. В вычислительной технике разделяют положительную (истина=1, ложь=0) и отрицательную (истина=0, ложь=1) логику.
В простейшей Булевой алгебре есть только два элемента, 0 и 1, и следующие операции:
Содержание
|
Нульарные
Нульарные операции суть константы. В двоичной логике ими являются логический нуль (0) и логическая единица (1).
Унарные
Инверсия (отрицание) — «¬», «НЕ», «НЕТ», f(1,1,01)2(x)=f(1,1,1)10
X | НЕ X |
---|---|
0 | 1 |
1 | 0 |
Бинарные
Конъюнкция — «», «&», «И», f(2,1,8)10(x,y)
Дизъюнкция — «», «|», «ИЛИ», f(2,1,14)10(x,y).
|
|
Двоичный полусумматор
f(10,10,10000110)2(x,y)=f(2,2,134)10(x,y)
X | Y | S=X Y= f(2,1,06)10(x,y) | P=X&Y= f(2,1,08)10(x,y) | |
---|---|---|---|---|
0 | 0 | 0 | 0 | |
1 | 0 | 1 | 0 | |
0 | 1 | 0 | ||
1 | 1 | 0 | 1 |
S — бит суммы по модулю 2
P — бит переноса в n+1 разряд
Двоичный полувычитатель
f(10,10,01000110)2(x,y)=f(2,2,70)10(x,y)
X | Y | R=X Y= f(2,1,06)10(x,y) | Z(N+1)= f(2,1,04)10(x,y) | |
---|---|---|---|---|
0 | 0 | 0 | 0 | |
1 | 0 | 1 | 0 | |
0 | 1 | 1 | 1 | |
1 | 1 | 0 | 0 |
R — бит разности по модулю 2
Z — бит займа из n+1 разряда
Тринарные
f(11,01,10000000)2(x,y,z)=f(3,1,128)10(x,y,z) и
f(11,01,11111110)2(x,y,z)=f(3,1,254)10(x,y,z)
|
|
Двоичный сумматор
f(11,10,1110100010010110)2(x,y,z)=f(3,2,59542)10(x,y,z)
X | Y | P(N-1) | S=X Y Z= f(3,1,150)10(x,y,z) | P(N+1)= f(3,1,232)10(x,y,z) |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 1 | 0 |
0 | 1 | 0 | 1 | 0 |
1 | 1 | 0 | 0 | 1 |
0 | 0 | 1 | 1 | 0 |
1 | 0 | 1 | 0 | 1 |
0 | 1 | 1 | 0 | 1 |
1 | 1 | 1 | 1 | 1 |
Двоичный вычитатель
f(11,10,110100010010110)2(x,y,z)=f(3,2,55446)10(x,y,z)
X | Y | Z(N-1) | R=X Y Z= f(3,1,150)10(x,y,z) | Z(N+1)= f(3,1,216)10(x,y,z) |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 1 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 0 | 0 | 0 |
0 | 0 | 1 | 1 | 1 |
1 | 0 | 1 | 0 | 0 |
0 | 1 | 1 | 0 | 1 |
1 | 1 | 1 | 1 | 1 |
Z(N-1) — бит займа в N-1 разряд, второе вычитаемое
Z(N+1) — бит займа из N+1 разряда
См.
также- Булевы функции
- Булева алгебра
- Битовые операции
- Двухуровневый элемент
- Комбинационная логика
- Логические элементы
- Секвенциальная логика
- Троичная логика
- Семиричная логика
Ссылки
- http://alpha3300.karelia.ru/koi/posob/log_basis/vichet.html Логические основы ЭВМ. Двоичное вычитание
с — 1 = ложь и 0 = правда?
спросил
Изменено 5 месяцев назад
Просмотрено 258 тысяч раз
Я наткнулся на функцию is_equals() в c API на работе, которая возвращала 1 для неравных таблиц sql (ложь) и 0 для равных (истина). Я понял это только после того, как запустил тестовые примеры в моем коде, один для положительного примера и один для отрицательного, и оба они потерпели неудачу, что поначалу не имело большого смысла. В коде API нет ошибки, так как вывод правильно записан в его документации.
Мои вопросы — существуют ли перевернутые миры/параллельные вселенные/языки кодирования, где это логическое НОТирование является нормальным? Разве 1 обычно не верно? Кодировщик API делает ошибку?
- c
- логика
6
Обычно функции сравнения возвращают 0
на «равно», так что они также могут возвращать отрицательное число для «меньше чем» и положительное число для «больше чем». strcmp()
и memcmp()
работают следующим образом.
Однако идиоматично, что ноль является ложным, а ненулевое значение — истинным, потому что именно так работают управление потоком C и логические логические операторы. Таким образом, может случиться так, что возвращаемые значения, выбранные для этой функции, прекрасны, но ошибка заключается в имени функции (на самом деле она должна называться просто compare()
или аналогичной).
3
Этот перевернутый мир характерен для возврата ошибок процесса. Переменная оболочки $?
сообщает о возвращаемом значении предыдущей программы для выполнения из оболочки, поэтому легко определить, успешно или неудачно выполнена программа:
$ false ; эхо $? 1 $ правда ; эхо $? 0
Это было выбрано потому, что есть единственный случай, когда программа завершается успешно, но могут быть десятки причин, по которым программа завершается сбоем.0031 почему другая программа не выполнила синтаксический анализ вывода.
Конкретным примером является программа aa-status
, поставляемая с инструментом обязательного контроля доступа AppArmor:
После выхода aa-status установит возвращаемое значение равным следующие значения: 0, если apparmor включен и политика загружена. 1, если apparmor не включен/загружен. 2, если apparmor включен, но политика не загружена. 3, если файлы управления apparmor недоступны в /sys/ядро/безопасность/. 4 если пользователю, запускающему скрипт, недостаточно права на чтение файлов управления apparmor.
(Я уверен, что есть более распространенные программы с таким поведением, но я хорошо знаю эту 🙂
4
Я подозреваю, что это просто следование стандарту Linux/Unix для возврата 0 в случае успеха.
Действительно ли говорит, что «1» ложно, а «0» истинно?
2
Нет веских оснований считать 1
истинным, а 0
ложным; это просто то, как вещи всегда были отмечены. Таким образом, с логической точки зрения функция в вашем API сама по себе не является «неправильной».
Тем не менее, обычно не рекомендуется использовать против идиом любого языка или фреймворка, который вы используете, без чертовски веской причины, так что тот, кто написал эту функцию, вероятно, был довольно тупоголовым, предполагая, что это не просто Жук.
1
Вполне может быть, что первоначальный автор ошибся, однако представление о том, что 1 истинно, а 0 ложно, не является универсальной концепцией. В сценариях оболочки 0 возвращается в случае успеха, а любое другое число — в случае неудачи. В других языках, таких как Ruby, только nil и false считаются ложными, а любое другое значение считается истинным, поэтому в Ruby и 1, и 0 будут считаться истинными.
1
Простой ответ
0 = ложь 1 = правда
1
Не уверен, что правильно отвечаю на вопрос, но вот знакомый пример:
Тип возвращаемого значения GetLastError()
в Windows отличен от нуля, если произошла ошибка, или ноль в противном случае. Обратное обычно верно для возвращаемого значения функции, которую вы вызвали.
Обычно мы думаем, что 0 ложно, а 1 верно
2
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя адрес электронной почты и пароль
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Boolean Тип данных? – Блог Digilent
Добро пожаловать в блог Digilent!
Верно! Boolean — это тип данных. Тем не менее, это также термин, которым пользуются в мире электроники программисты, предполагающие, что все остальные знают, о чем они говорят; Лично я могу подтвердить, что это не всегда так. В свете этого давайте рассмотрим некоторые типы данных, которые обычно используются в программировании.
Но прежде всего, что такое тип данных? В широком смысле типы данных — это способы представления различных видов информации в компьютерном процессоре или ПЛИС. Сегодня мы обсудим логические, целые, символьные и числа с плавающей запятой, которые широко известны как примитивные типы данных. Существуют также другие типы данных, известные как составные типы данных, хотя обычно это просто комбинации примитивных типов данных, таких как массив. Компьютерные процессоры, микропроцессоры и ПЛИС хранят эти типы данных в двоичном формате в виде последовательности 1 и 0. В компьютерной системе каждая «1» или «0» (бит) классически группируется в наборы по восемь, чтобы сформировать то, что известно как байт. Поскольку процессор будет обмениваться данными в этом байтовом формате, каждый тип данных, даже если для представления требуется только один бит, будет храниться внутри байта.
32 бита данных будут разделены на четыре байта по восемь бит в каждом.Логическое значение, как вы могли догадаться, представляет собой тип данных, представляющий «истина» или «ложь». Однако при хранении информации на компьютере нет оборудования, способного хранить буквальное «истина или ложь», поэтому многие языки программирования вместо этого будут иметь значения «истина» и «ложь», эквивалентные числам «1» и «0». представлены высоким и низким напряжением. Это допускает, что потенциальная операция «true + true» будет равна «2». Как этот забавный факт может быть полезен в реальной жизненной ситуации, я не понимаю, но, эй, забавные факты все еще забавны! Истинный или ложный характер логического значения делает его отличным способом отслеживать то, что срабатывает «включено или выключено» или «влево и вправо».
Две опции для логического типа данных. Изображение с jdhitsolutions.com.Символ, обычно называемый char, представляет собой массив битов (один байт в C++), который определяет визуальное представление символа. Эти символы обычно определяются таблицей ASCII и состоят из многих символов, которые вы видите на клавиатуре. Символы технически являются составным типом данных, так как многие символы могут быть помещены вместе для формирования строки (серии символов), а также тот факт, что для отображения каждого из них необходим массив битов (представляющих пиксели, которые можно включать и выключать). персонажей. С правильными ресурсами вы также можете определить свой собственный набор символов для отображения «нестандартных» символов.
PmodOLED, отображающий различные символы.
Целые числа, обычно сокращаемые до int, являются стандартным способом хранения чисел в вашем коде. Они могут хранить различные числа, включая двоичные, десятичные и шестнадцатеричные числа, и не требуют каких-либо специальных манипуляций со стороны программиста для хранения одного типа числа вместо другого внутри типа int. На платах chipKIT™ с процессором PIC32 целые числа имеют длину 32 бита, что позволяет хранить числа в диапазоне от -2 147 483 647 до +2 147 483 647 для знака (положительного или отрицательного) и от 0 до 4,29.4 967 295 за неподписанную (только положительную) версию. Несмотря на то, что изначально он имеет длину 32 бита, можно объявить целое число меньшего значения, например, только 16 бит или 8 бит, чтобы сэкономить место в процессоре, хотя, естественно, это будет сделано за счет экспоненциально укороченного размер числа, который могут принимать эти целые числа. Ограничение с целыми числами заключается в том, что они не могут принимать десятичные знаки. Если вы попытаетесь присвоить целому числу значение 31,96, оно сохранит только 31. 0,96 вместо этого будет усечен, что означает, что он будет полностью отброшен без какого-либо округления.
Неотъемлемая природа целого числа.
Последний тип данных, о котором я расскажу, — это числа с плавающей запятой. Это тип данных, который может принимать числа с десятичными знаками. Этот тип данных работает в стиле научной нотации; заданное число устроено так, что перед десятичной запятой стоит одно значение, а остальные значащие числа — после запятой с восемью битами из 32, выделенными для показателя степени, указывающего величину числа.
Разбивка 32-битного числа с плавающей запятой. Изображение Fresheneesz с этой страницы Википедии.
С точки зрения практического применения это равносильно тому, что «поплавок» может обрабатывать и отслеживать около семи знаков после запятой. «Двойник» похож на число с плавающей запятой, за исключением того, что он использует два набора по 32 бита, всего 64 бита (восемь байтов). Как число с плавающей запятой двойной точности (отсюда и название), оно может отслеживать около 16 знаков после запятой, что позволяет выполнять более точные вычисления, хотя вычисления с использованием двойных чисел занимают больше времени, чем числа с плавающей запятой, потому что они занимают два слота памяти в PIC32. К счастью, при работе на частоте 80 МГц на платах Digilent chipKIT эта разница во времени для большинства приложений незначительна.