Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Список использованных источников.

Логические операции

И сдвиги

 

Выполнил ученик класса

Бойченко Сергей

Руководитель

Бекетов Юрий Александрович

Калининград

Оглавление

 

Введение. 3

1. Логические операции. 4

2. Битовые операции. 7

3. Битовый сдвиг. 11

Заключение. 14

Список использованных источников. 15

 

 


 

Введение.

 

Логические операции.

 

1.1. Основы.

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

 

2.2. Формальная логика.

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

К операциям, которые связаны преимущественно с изменением содержания понятий, относятся:

· отрицание;

· ограничение;

· обобщение;

К операциям, которые связаны преимущественно с объёмами понятий, относятся:

· сложение;

· умножение;

· вычитание.

Данные операции могут быть записаны математически с помощью теории множеств.

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

 

2.3. Программирование.

Логическая операция — в программировании операция над выражениями логического или же булевского типа, соответствующая некоторой операции над высказываниями в алгебре логики. Как и высказывания, логические выражения могут принимать одно из двух истинностных значений — «истинно» или «ложно». Логические операции служат для получения сложных логических выражений из более простых. В свою очередь, логические выражения обычно используются как условия для управления последовательностью выполнения программы.

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

Значение отдельного бита также можно рассматривать как логическое, если считать, что 1 означает «истинно», а 0 — «ложно». Это позволяет применять логические операции к отдельным битам, к битовым векторам покомпонентно и к числам в двоичном представлении поразрядно. Такое одновременное применение логической операции к последовательности битов осуществляется с помощью побитовых логических операций. Побитовые логические операции используются для оперирования отдельными битами или группами битов, применяются для наложения битовых масок, выполнения различных арифметических вычислений.

Среди логических операций наиболее известны конъюнкция (&&), дизъюнкция (||), отрицание (!). Их нередко путают с битовыми операциями, хотя это разные вещи.

 

Битовые операции.

 

2.1. Основы.

Битовая операция в программировании — некоторые операции над цепочками битов. В программировании, как правило, рассматриваются лишь некоторые виды этих операций: логические побитовые операции и битовые сдвиги. Битовые операции применяются в языках программирования и цифровой технике, изучаются в дискретной математике. В некоторых языках программирования названия операторов, соответствующих логическим и побитовым логическим операциям, похожи. Кроме того, язык программирования может допускать неявное приведение числового типа к логическому и наоборот. В таких языках программирования необходимо внимательно следить за использованием логических и побитовых операций, перемешивание которых может привести к ошибкам. Например, в C++ результатом выражения «2 && 1» (логическое И) является булево значение true, а результатом выражения «2 & 1» (побитовое И) — целое значение 0.

 

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

Побитовое отрицание (или побитовое НЕ, или дополнение) — это унарная операция, действие которой эквивалентно применению логического отрицания к каждому биту двоичного представления операнда. Другими словами, на той позиции, где в двоичном представлении операнда был 0, в результате будет 1, и, наоборот, где была 1, там будет 0. Например:

НЕ  
   

 

 

2.3. Побитовое “И” (AND).

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

Пример.

И  
 
   

 

2.4. Побитовое “ИЛИ” (XOR).

Исключающее«ИЛИ» (или сложение по модулю 2) — это бинарная операция, результат действия которой равен 1, если число складываемых единичных битов нечётно и равен 0, если чётно. Другими словами, если оба соответствующих бита операндов равны между собой, двоичный разряд результата равен 0; в противном случае, двоичный разряд результата равен 1.

Пример.

ИЛИ  
 
   

 

2.5. Другие побитовые логические операции.

В распространённых языках программирования встроенными средствами реализуются только четыре побитовые логические операции: И, ИЛИ, НЕ и исключающее ИЛИ. Для задания произвольной побитовой логической операции вполне достаточно перечисленных, и, более того, как следует из теории булевых функций, можно ограничиться ещё меньшим набором базовых операций. Есть также языки программирования, где существует встроенная возможность выполнить любую бинарную логическую операцию побитово. Например, в PL/I есть встроенная функция BOOL, третий аргумент которой предназначен для указания произвольной логической операции, которую необходимо побитово применить к первым двум аргументам.

 

2.6. Схемы аппаратной логики.

Результат операции ИЛИ-НЕ или ИЛИ от всех битов двоичного регистра проверяет, равно ли значение регистра нулю; то же самое, взятое от выхода искл. ИЛИ двух регистров, проверяет равенство их значений между собой.

Битовые операции применяются в знакогенераторах и графических адаптерах; особенно велика была их роль в адаптере EGA в режимах с 16 цветами — хитроумное сочетание аппаратной логики адаптера с логическими командами центрального процессора позволяет рассматривать EGA как первый в истории графический ускоритель.

 

2.7. Использование в программировании.

Благодаря реализации в арифметическом логическом устройстве (АЛУ) процессора многие регистровые битовые операции аппаратно доступны в языках низкого уровня. В большинстве процессоров реализованы в качестве инструкции регистровый НЕ; регистровые двухаргументные И, ИЛИ, исключающее ИЛИ; проверка равенства нулю (см. выше); три типа битовых сдвигов, а также циклические битовые сдвиги.

Регистровая операция И используется для:

· проверки бита на 0 или 1

· установки 0 в указанный бит (сброса бита)

Регистровая операция ИЛИ используется для:

· установки 1 в указанный бит

Регистровая операция исключающее ИЛИ используется для инвертирования битов регистра по маске.

Сдвиг влево/вправо используется для умножения/целочисленного деления на 2 и выделения отдельных битов.

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

 

 

Битовый сдвиг.

 

3.1. Основы.

Битовый сдвиг — изменение позиций битов в слове на одну и ту же величину. Для обеспечения работы с битами существует множество машинных инструкций, включающие различные типы сдвигов. Все сдвиги похожи друг на друга поведением средних битов, которые просто сдвигаются влево или вправо на определённую величину. Однако, поведение крайних битов, которые уходят из слова и которые появляются в слове, зависит от типа сдвига.

В электронике битовые сдвиги осуществляются в регистрах сдвига.

 

3.2. Логический сдвиг.

Это сдвиг, при котором уходящий бит исчезает, не влияя на оставшиеся биты, а на месте появившегося бита записывается бит 0. Пример работы операции сдвига: Пусть у нас есть число 10101010 в двоичной системе. Если сделать сдвиг влево на 1 бит, то получим число 01010100. Если сделать сдвиг исходного числа вправо на 1 бит, то получим число 01010101. В большинстве процессоров уходящий бит сохраняется во флаге переноса. Эта функция широко используется при работе со многобайтовыми числами.

 

3.3. Арифметический сдвиг.

При этом сдвиге слово рассматривается не просто как группа битов, а как целое число в дополнительном коде. При сдвиге влево ведёт себя как логический сдвиг, при сдвиге вправо уходящий бит исчезает, не влияя на оставшиеся биты, а на месте появившегося бита устанавливается бит, соответствующий знаку. Пример работы операции сдвига: Пусть у нас есть число 11111010 = −6 в двоичной системе. Если сделать сдвиг влево на 1 бит, то получим число 11110100 = −12. Если сделать сдвиг исходного числа вправо на 1 бит, то получим число 11111101 = −3. Легко заметить, что при арифметическом сдвиге сдвиг влево соответствует умножению на 2, а сдвиг вправо — делению на 2 (в общем случае — на основание системы счисления) с округлением к −∞. Например:

1011=-5 1111=-1
>>a 1 >>a 1
---- ----
1101=-3 1111=-1

 

 

Схемотехническая реализация операций сдвига очень проста. Именно поэтому эти операции рекомендуют использовать для операций умножения и деления целых чисел на числа, равные степени 2 (2, 4, 8, 16, 32, 64 и т. д.) — если, конечно, такое округление отрицательных чисел не мешает.

 

3.4. Циклический сдвиг.

Сдвиг, при котором уходящий бит появляется на месте появившегося свободного на другом конце числа. Пример работы операции сдвига: Пусть у нас есть число 11111010 в двоичной системе. Если сделать сдвиг влево на 1 бит, то получим число 11110101. Если сделать сдвиг вправо на 1 бит, то получим число 01111101.

 

3.5. Циклический сдвиг через бит переноса.

В архитектуру многих процессоров входит флаг переноса в следующий разряд (например, cf на x86). Данная операция выполняет циклический сдвиг над (n+1)-битным числом, состоящим из регистра и флага переноса. Например, если у нас в регистре число 11111010, флаг переноса равен 0. После сдвига влево на 1 бит в регистре 11110101, флаг переноса равен 1. После сдвига вправо на 1 бит в регистре 01111101, флаг переноса равен 0. Операция циклического сдвига через бит переноса используется при работ с многобайтовыми числами. В частности, чтобы сдвинуть вправо на 1 бит длинное число, нужно очистить cf (в случае деления числа со знаком нужно записать в cf старший бит старшего слова) и циклически сдвинуть на единицу через cf каждое слово, начиная с верхнего. Например, пусть у нас есть число 011000111100b, занимающее три 4-битных слова:

Было: HI=0110 MED=0011 LO=1100 cf=0
После сдвига HI: HI=0011 MED=0011 LO=1100 cf=0
После сдвига MED: HI=0011 MED=0001 LO=1100 cf=1
После сдвига LO: HI=0011 MED=0001 LO=1110 cf=0

Сдвиги через регистр флагов более чем на 1 бит практически не используются.


 

Заключение.


 

Список использованных источников.

 

1. Общедоступная универсальная интернет-энциклопедия Википедия URL: https://ru.wikipedia.org/wiki/%D0%9B%D0%BE%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D1%8F

2. Общедоступная универсальная интернет-энциклопедия Википедия URL: https://ru.wikipedia.org/wiki/%D0%91%D0%B8%D1%82%D0%BE%D0%B2%D1%8B%D0%B5_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8

3. Общедоступная универсальная интернет-энциклопедия Википедия URL: https://ru.wikipedia.org/wiki/%D0%91%D0%B8%D1%82%D0%BE%D0%B2%D1%8B%D0%B9_%D1%81%D0%B4%D0%B2%D0%B8%D0%B3

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...