Xor логическая операция что это

Команда XOR

Команда XOR в Ассемблере выполняет операцию исключающего ИЛИ между всеми битами двух операндов. Результат операции XOR записывается в первый операнд. Синтаксис:

XOR ПРИЁМНИК, ИСТОЧНИК

ПРИЁМНИК может быть одним из следующих:

ИСТОЧНИК может быть одним из следующих:

С учётом ограничений, которые были описаны выше, комбинации ПРИЁМНИК-ИСТОЧНИК могут быть следующими:

Операция исключающего ИЛИ

При выполнении операции исключающего ИЛИ значение результата будет равно 1, если сравниваемые биты отличаются (не равны). Если же сравниваемые биты имеют одинаковое значение, то результат будет равен 0.

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

Но, так как любая пара неодинаковых битов это 0 и 1, то операция логического ИЛИ в результате даст 1.

Таблица истинности исключающего ИЛИ

Таблица истинности XOR приведена ниже:

Особенности операции XOR

Операция XOR обладает свойством реверсивности. Если её выполнить дважды с одним и тем же операндом, то значение результата инвертируется. То есть если два раза выполнить эту операцию между битами X и Y, то в конечном результате мы получим исходное значение бита Х.

Это свойство можно использовать, например, для простейшего шифрования данных (об этом как-нибудь в другой раз).

Проверка флага чётности после операции XOR

Команда XOR работает с 8-, 16- и 32-разрядными операциями.

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

Если флаг чётности установлен, то в результате получилось чётное количество единичных битов. Иначе флаг будет сброшен.

Можно также просто проверить на чётность любое число, не меняя значения результата. Для этого надо выполнить команду XOR с нулевым значением. То есть в ПРИЁМНИКЕ должно быть проверяемое число, а в ИСТОЧНИКЕ должен быть ноль. А затем надо проверить флаг чётности. Пример:

Чётность в 16-разрядных словах

Как уже было сказано, флаг чётности устанавливается в зависимости от количества единиц, содержащихся в младшем байте результата. Чтобы проверить чётность 16-разрядного операнда, надо выполнить команду XOR между старшим и младшим байтом этого числа:

Таким нехитрым способом 16-разрядный операнд разбивается на два байта (2 группы по 8 битов), и при выполнении команды XOR единичные биты, находящиеся в соответствующих разрядах двух 8-разрядных операндов, не будут учитываться. Потому что соответствующий бит результата равен нулю.

Команда XOR удаляет из результата любые пересекающиеся единичные биты двух 8-разрядных операндов и добавляет в результат непересекающиеся единичные биты. То есть чётность полученного нами 8-разрядного числа будет такой же, как и чётность исходного 16-разрядного числа.

В результате 4 единицы, то есть флаг PF будет установлен

Чётность в 32-разрядных двойных словах

Ну а если надо определить чётность в 32-разрядном числе?

Тогда число разбивается на четыре байта, и поочерёдно с этими байтами выполняется операция исключающего ИЛИ.

Тогда для определения чётности числа В нам надо будет использовать следующую формулу:

B0 XOR B1 XOR B2 XOR B3

Но в ассемблере такая запись недопустима. Поэтому придётся немного подумать.

Источник

BestProg

C++. Логические операции. Поразрядные логические операции. Операции сдвига. Операция XOR

Содержание

Поиск на других ресурсах:

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

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

2. Какие логические операции используются в C/C++?

В языке программирования C/C++ используются следующие логические операции:

3. Таблица истинности логических операций

Таблица истинности логических операций && (логическое «И»), || (логическое «ИЛИ»), ! (логическое «НЕТ») имеет следующий вид:

Xor логическая операция что это. 05 02 02 03 06 table 01. Xor логическая операция что это фото. Xor логическая операция что это-05 02 02 03 06 table 01. картинка Xor логическая операция что это. картинка 05 02 02 03 06 table 01

В языке C/C++ принимается, что значение false равно 0, а значение true не равно 0 (любое ненулевое целочисленное значение).

4. Примеры использования логических операций в C++

Пример 1. Логическая операция в сочетании с логическим выражением

5. Какие поразрядные логические операции используются в C/C++?

Язык С/С++ поддерживает следующие поразрядные логические операции:

– поразрядная инверсия ( NOT ).

6. Таблица истинности поразрядных логических операций

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

Xor логическая операция что это. 05 02 02 03 06 table 02r. Xor логическая операция что это фото. Xor логическая операция что это-05 02 02 03 06 table 02r. картинка Xor логическая операция что это. картинка 05 02 02 03 06 table 02r

Инверсия требует единого операнда справа от знака

. Результат получается поразрядной инверсией всех битов операнда.

7. Пример работы с логическими побитовыми операциями

Xor логическая операция что это. 05 02 02 03 06 01. Xor логическая операция что это фото. Xor логическая операция что это-05 02 02 03 06 01. картинка Xor логическая операция что это. картинка 05 02 02 03 06 01

Как видно из примера, происходит выполнение заданной операции над каждым битом.

8. Какие операции сдвига используются в C/C++?

Язык С/С++ включают две операции поразрядного сдвига:

Выдвижные биты теряются, а «входят» нулевые биты. Сдвиг операндов влево на 1, 2, 3 и более разрядов – наиболее быстрый способ умножения на 2, 4, 8, … Сдвиг операндов вправо на 1, 2, 3 и более разрядов – наиболее быстрый способ деления на 2, 4, 8, …

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

Это касается и случаев, когда нужно максимально быстро поделить целочисленный операнд на 2, 4, 8 и т.д. В этих случаях рекомендуется использовать сдвиг вправо.

9. Примеры использования операций сдвига в программе
10. Какое отличие между логическими операциями и поразрядными логическими операциями?

Поразрядные логические операции работают строго с битами любого операнда. Бит может иметь 2 значения: 0 или 1. Поэтому, вычислению подлежат соответствующие биты каждого операнда а не значение операнда в целом.

Как известно, язык C++ не содержит встроенной логической операции XOR (исключающее «ИЛИ»).

Ниже приведен фрагмент кода, который реализует операцию XOR с помощью использования операций && ( AND ), || ( OR ), ! ( NOT ).

В вышеприведенном программном коде:

Источник

Xor логическая операция что это

Войти

Авторизуясь в LiveJournal с помощью стороннего сервиса вы принимаете условия Пользовательского соглашения LiveJournal

Проект «логика для чайников». Параграф 26.

Простейшие логические операции

Простейшие логические операции относятся к двузначной логике. Их 4 штуки: “НЕ”, “И”, “ИЛИ”, “XOR”. Также для обозначения этих операций используют разные значки (“

При записи логических формул вместо слов “истина” и “ложь” обычно используют стандартные международные обозначения:
Вместо “истина” пишут: true, T, t, 1.
Вместо “ложь” пишут: false, F, f, 0.

Операция “НЕ” преобразует истину в ложь, а ложь в истину:

НЕ true = false
НЕ false = true

У этой операции бывают разные другие названия: “логическое НЕ”, “отрицание”, “логическое отрицание”, “инверсия”, “логическая инверсия”. Для международных обозначений вместо “НЕ” пишут “NOT”.

В естественном языке этой операции соответствует добавление слов “неправда, что. ” в начале высказывания. Например:

“Сурков должен мне денег”. (1)

Применение операции “НЕ” к высказыванию (1):

“Неправда, что Сурков должен мне денег”. (2)

Если высказывание (1) ложно, то высказывание (2) истинно. Если высказывание (2) ложно, то высказывание (1) истинно.

Нетрудно понять, что двойное применение “НЕ” возвращает нас к прежней истинности.

“Неправда, что неправда, что Сурков должен мне денег”. (3)

Истинность высказывания (3) всегда совпадает с истинностью высказывания (1).

Операция “И” применяется к двум высказываниям. Ее результат “истина”, только если оба высказывания истинны (а иначе “ложь”):

false И false = false
false И true = false
true И false = false
true И true = true

У этой операции бывают разные другие названия: “логическое И”, “конъюнкция”, “логическое умножение”. Для международных обозначений вместо “И” пишут “AND”.

В естественном языке этой операции соответствует вставка союза “и” между высказываниями. Например:

“Сурков должен мне денег”. (1)
“Петров должен мне денег”. (2)

Применение операции “И” к высказываниям (1) и (2):

“Сурков должен мне денег, и Петров должен мне денег”. (3)

Эту фразу можно сократить, сохранив прежний смысл:

“Сурков и Петров должны мне денег”. (3)

Высказывание (3) истинно только тогда, когда истинны оба высказывания: (1) и (2). Если хотя бы одно из них ложно, то результат тоже ложен. Если оба ложны – тоже.

То есть, если Петров мне денег не задолжал, а задолжал только Сурков, тогда высказывание (3) не будет “полуправдой” или “полуложью”, а будет просто ложью.

Операция “ИЛИ” применяется к двум высказываниям. Ее результат “истина”, если хотя бы одно высказывание истинно (а иначе “ложь”):

false ИЛИ false = false
false ИЛИ true = true
true ИЛИ false = true
true ИЛИ true = true

У этой операции бывают разные другие названия: “логическое ИЛИ”, “включающее ИЛИ”, “дизъюнкция”, “логическое сложение”. Для международных обозначений вместо “ИЛИ” пишут “OR”.
В естественном языке этой операции соответствует вставка союза “или” между высказываниями, но. не всегда (см. ниже об операции “XOR”). Например:

“Я хочу попить”. (1)
“Я хочу поесть”. (2)

Применение операции “ИЛИ” к высказываниям (1) и (2):

“Я хочу попить, или я хочу поесть”. (3)

По-русски звучит правильно, но коряво, и эту фразу можно сократить, сохранив прежний смысл:

“Я хочу попить или поесть ”. (3)

Высказывание (3) истинно тогда, когда истинно хотя бы одно из высказываний (1) и (2), а можно оба. Если оба высказывания ложны, то результат тоже ложен.

То есть, если я хочу есть, но не пить, тогда высказывание (3) истинно. Если я не прочь и поесть, и попить, выказывание (3) тоже истинно. Ложно оно тогда, когдя я не хочу ни того, ни другого.

Операция “XOR” применяется к двум высказываниям. Ее результат “истина”, если ровно одно из высказываний истинно (а иначе “ложь”):

false XOR false = false
false XOR true = true
true XOR false = true
true XOR true = false

У этой операции бывают разные другие названия: “исключающее ИЛИ”, “сложение по модулю 2”, “логическое сложение по модулю 2”. “XOR” – это международное обозначение, общепринятого “русского” аналога нет.

В естественном языке этой операции соответствует вставка союза “или” между высказываниями – так же, как в случае с операцией “ИЛИ”. Например:

“Я собираюсь просить прибавки к зарплате”. (1)
“Я попытаюсь сэкономить ”. (2)

Применение операции “XOR” к высказываниям (1) и (2):

“Я собираюсь просить прибавки к зарплате или я попытаюсь сэкономить”. (3)

“Я собираюсь просить прибавки к зарплате или попытаюсь сэкономить”. (3)

Высказывание (3) истинно тогда, когда истинно ровно одно из высказываний (1) и (2). Если я не собираюсь ни просить прибавки, ни экономить, тогда фраза ложна. Также, я имел в виду, что не собираюсь делать и то, и другое одновременно.

Обратите внимание на разницу между операциями “ИЛИ” и “XOR”. Она заключается только в последнем правиле:

true ИЛИ true = true
true XOR true = false

В естественном языке обе операции изображаются одним и тем же союзом “или”. Это – пример неоднозначности естественного языка. Если помните, омонимы и многозначные слова могут иметь больше одного значения. Союз “или” именно такой: он имеет два возможных значения. Первое выражается логической операцией “ИЛИ”, второе – логической операцией “XOR”.

В английском языке существуют те же проблемы: союз “or” имеет те же два значения. А вот древним римлянам было проще, так как в латыни есть два разных слова: “vel” (операция “ИЛИ”) и “aut” (операция “XOR”).

Поскольку разница между операциями “ИЛИ” и “XOR” невелика (всего одно последнее правило), то иногда эта разница не имеет значения. Иногда о том, что имеется в виду, можно догадаться по интонации, или по контексту. Иногда определить точный смысл так и не удается.

Источник

О битовых операциях

Xor логическая операция что это. Baseball Bats. Xor логическая операция что это фото. Xor логическая операция что это-Baseball Bats. картинка Xor логическая операция что это. картинка Baseball Bats

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

Введение

Побитовые операторы проводят операции непосредственно на битах числа, поэтому числа в примерах будут в двоичной системе счисления.

Я расскажу о следующих побитовых операторах:

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

О битовых операторах вам также необходимо знать:

Побитовое ИЛИ (OR)

Побитовое ИЛИ действует эквивалентно логическому ИЛИ, но примененному к каждой паре битов двоичного числа. Двоичный разряд результата равен 0 только тогда, когда оба соответствующих бита в равны 0. Во всех других случаях двоичный результат равен 1. То есть, если у нас есть следующая таблица истинности:

Xor логическая операция что это. OR. Xor логическая операция что это фото. Xor логическая операция что это-OR. картинка Xor логическая операция что это. картинка OR

38 | 53 будет таким:

A00100110
B00110101
A | B00110111

Побитовое И (AND)

Побитовое И — это что-то вроде операции, противоположной побитовому ИЛИ. Двоичный разряд результата равен 1 только тогда, когда оба соответствующих бита операндов равны 1. Другими словами, можно сказать, двоичные разряды получившегося числа — это результат умножения соответствующих битов операнда: 1х1 = 1, 1х0 = 0. Побитовому И соответствует следующая таблица истинности:

Xor логическая операция что это. AND. Xor логическая операция что это фото. Xor логическая операция что это-AND. картинка Xor логическая операция что это. картинка AND

Пример работы побитового И на выражении 38 & 53:

A00100110
B00110101
A & B00100100

Исключающее ИЛИ (XOR)

Разница между исключающим ИЛИ и побитовым ИЛИ в том, что для получения 1 только один бит в паре может быть 1:

Xor логическая операция что это. XOR. Xor логическая операция что это фото. Xor логическая операция что это-XOR. картинка Xor логическая операция что это. картинка XOR

Например, выражение 138^43 будет равно…

A10001010
B00101011
A ^ B10100001

С помощью ^ можно поменять значения двух переменных (имеющих одинаковый тип данных) без использования временной переменной.

Также с помощью исключающего ИЛИ можно зашифровать текст. Для этого нужно лишь итерировать через все символы, и ^ их с символом-ключом. Для более сложного шифра можно использовать строку символов:

Исключающее ИЛИ не самый надежный способ шифровки, но его можно сделать частью шифровального алгоритма.

Побитовое отрицание (NOT)

Побитовое отрицание инвертирует все биты операнда. То есть, то что было 1 станет 0, и наоборот.

Xor логическая операция что это. NOT. Xor логическая операция что это фото. Xor логическая операция что это-NOT. картинка Xor логическая операция что это. картинка NOT

Вот, например, операция

Результатом будет 20310

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

Дополнительный код

Здесь мне стоит рассказать вам немного о способе представления отрицательных целых чисел в ЭВМ, а именно о дополнительном коде (two’s complement). Не вдаваясь в подробности, он нужен для облегчения арифметики двоичных чисел.

Главное, что вам нужно знать о числах, записанных в дополнительном коде — это то, что старший разряд является знаковым. Если он равен 0, то число положительное и совпадает с представлением этого числа в прямом коде, а если 1 — то оно отрицательное. То есть, 10111101 — отрицательное число, а 01000011 — положительное.

Чтобы преобразовать отрицательное число в дополнительный код, нужно инвертировать все биты числа (то есть, по сути, использовать побитовое отрицание) и добавить к результату 1.

Например, если мы имеем 109:

A01101101

A+1

10010011

Побитовый сдвиг влево

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

Побитовый сдвиг вправо

Как вы могли догадаться, >> сдвигает биты операнда на обозначенное количество битов вправо.

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

Вывод

Итак, теперь вы знаете больше о битовых операциях и не боитесь их. Могу предположить, что вы не будете использовать >>1 при каждом делении на 2. Тем не менее, битовые операции неплохо иметь в своем арсенале, и теперь вы сможете воспользоваться ими в случае надобности или же ответить на каверзный вопрос на собеседовании.

Источник

Xor логическая операция что это

Xor логическая операция что это. rating star. Xor логическая операция что это фото. Xor логическая операция что это-rating star. картинка Xor логическая операция что это. картинка rating starXor логическая операция что это. rating star. Xor логическая операция что это фото. Xor логическая операция что это-rating star. картинка Xor логическая операция что это. картинка rating starXor логическая операция что это. rating star. Xor логическая операция что это фото. Xor логическая операция что это-rating star. картинка Xor логическая операция что это. картинка rating starXor логическая операция что это. rating star blank. Xor логическая операция что это фото. Xor логическая операция что это-rating star blank. картинка Xor логическая операция что это. картинка rating star blankXor логическая операция что это. rating star blank. Xor логическая операция что это фото. Xor логическая операция что это-rating star blank. картинка Xor логическая операция что это. картинка rating star blank

В математике обычное ИЛИ (включающее, OR ) встречается гораздо чаще исключающего (также называемого XOR ).

Например, когда Вы пишете выражение pVq, которое читается ”p ИЛИ q”, это так называемое включающее ИЛИ. В этом случае это выражение ИСТИНА ( true ), если p = ИСТИНА или q = ИСТИНА, или и p = ИСТИНА и q = ИСТИНА.

Включающее ИЛИ используется в обычном понимании операции ИЛИ ( OR ), оно используется чаще в логике, нежели исключающее ИЛИ ( XOR ).

Зачастую мы используем логику исключающего ИЛИ в предложениях. Например, если человек говорит: «Этим летом я поеду в Лондон или в Париж», он таким образом говорит нам, что хочет поехать либо в Лондон, либо в Париж, но не в оба. Даже если его заявление не кажется нам неверным,если он съездит в оба эти города, скорее всего иметься в ввиду будет поездка только в один из этих городов.

Вы можете подумать, что XOR не является интересным оператором. Он похож на OR, почему он должен быть интереснее чем OR?

Сначала приведём таблицу истинности операции XOR для булевых переменных:

Различные видения XOR

Мы можем увидеть XOR с различных сторон.

Предположим, что p и q — булевы переменные (переменные, которые могут принимать два взаимоисключающих значения (0 или 1, либо ИСТИНА И НЕИСТИНА, либо true и false )).

Для операций над булевыми переменными мы увидим, что:

p 1 (+) p 2 (+). (+) p n это тоже самое как сложение по модулю 2. Т.е. Если трактовать, что true == 1, а false == 0, то:

Таким образом, применение XOR к булевым переменным эквивалентно представлению true=1, false =0, суммированию всех переменных и делению по модулю 2. Напомним, что деление по модулю 2 является одним из способов, чтобы определить, является ли число четным или нечетным. Сумма показывает сколько переменных имело значение 1.

Люди часто используют XOR в качестве инструмента контроля четности. Битовая строка является чётной, если содержит количество чисел 1, и является нечётной если количество единиц нечётное. Если вы выполните операцию XOR над всеми битами в строке, то можете сказать является строка чётной или нечётной.

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

Если число предаваемых байт N было равно 10, тогда последовательность дополняется 11-м байтом, в котором биты b i получены с помощью операции XOR над i- ми битами всех 10-и байтов посылки. Этот одиннадцатый байт называется контрольной суммой ( checksum ). Контрольная сумма также отсылается через сеть. На приёмном конце, куда приходят данные Вы можете независимо выполнить вычисление контрольной суммы и сравнить её с переданным значением. Если значения совпали, то это значит, что данные были переданы верно, если не совпали — нужно передавать их заново. Очевидно, что такая система может иметь ошибки. Например, если два бита было перевёрнуто, скажем бит с номером 3 байтов 4-го и 5-го, то контрольная сумма будет такой же, как если бы данные не были повреждены. Тем не менее такая система позволяет отлавливать некоторые ошибки передачи.

Несколько свойств для обычного XOR над булевыми переменными и побитового XOR.

“ Ксоринг с нулём даёт изначальное значение.

«Ксоринг» булевых переменных с единицей приводит к их инверсии (0 меняется на 1, а 1 на 0). В случае побитового XOR: x ^

x, т. е. если переменную «проксорить» с числом,у которого все биты равны 1, но получим бит-инвертированное число.

XOR ассоциативен, таким образом (x (+) y) (+) z = x (+) (y (+) z).

Вы можете проверить это, используя таблицу истинности.

XOR коммутативен, т. е. x (+) y = y (+) x.

Вы также можете это проверить, используя таблицу истинности.

Обмен значениями двух переменных без использования промежуточной

Это одна из головоломок, которую можно подкинуть другу. Обычно для обмена значениями двух переменных используется промежуточная переменная. Вот как это выглядит на Си:

Вы поняли как это работает? Возможно, нет. Давайте удостоверимся, что это работает.

Ключ к разгадке — отслеживать изменения значений x и y на каждом шаге.

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

x = x ^ y ;

y = x ^ y ;

// y == (A ^ B) ^ B == A ^ (B ^ B) (согласно ассоциативному закону)

// == A ^ 0 (так как z ^ z == 0)

x = x ^ y ;

// == ( A ^ A ) ^ B (ассоциативность+коммутативность)

Таким образом, после выполнения второй строчки кода y = A. После выполнения третьей строчки кода x = B.

Написание побитового XOR без операции ^

Предположим, что Вы хотите реализовать побитовое XOR, но нельзя использовать оператор ^. Что бы Вы сделали? Используя операции побитовое И (&) и побитовое ИЛИ (|), Вы можете сделать это.

Это стандартное определение побитового XOR из книжки по логике.

Как видим, операция XOR — очень интересная операция.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *