Что такое поразрядная конъюнкция
Перейти к содержимому

Что такое поразрядная конъюнкция

  • автор:

Что такое поразрядная конъюнкция

Каждое целое число в памяти представлено в виде определенного количества разрядов. И операции сдвига позволяют сдвинуть битовое представление числа на несколько разрядов вправо или влево. Операции сдвига применяются только к целочисленным операндам. Есть две операции:

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

Сдвигает битовое представление числа вправо на определенное количество разрядов.

Число 2 в двоичном представлении 10. Если сдвинуть число 10 на два разряда влево, то получится 1000, что в десятичной системе равно число 8.

Число 16 в двоичном представлении 10000. Если сдвинуть число 10 на три разряда вправо (три последних разряда отбрасываются), то получится 10, что в десятичной системе представляет число 2.

Поразрядные операции

Поразрядные операции также проводятся только над разрядами целочисленных операндов:

& : поразрядная конъюнкция (операция И или поразрядное умножение). Возвращает 1, если оба из соответствующих разрядов обоих чисел равны 1

| : поразрядная дизъюнкция (операция ИЛИ или поразрядное сложение). Возвращает 1, если хотя бы один из соответствующих разрядов обоих чисел равен 1

^ : поразрядное исключающее ИЛИ. Возвращает 1, если только один из соответствующих разрядов обоих чисел равен 1

: поразрядное отрицание. Инвертирует все разряды операнда. Если разряд равен 1, то он становится равен 0, а если он равен 0, то он получает значение 1.

Например, выражение 5 | 2 равно 7. Число 5 в двоичной записи равно 101, а число 2 — 10 или 010. Сложим соответствующие разряды обоих чисел. При сложении если хотя бы один разряд равен 1, то сумма обоих разрядов равна 1. Поэтому получаем:

1 0 1
0 1 0
1 1 1

В итоге получаем число 111, что в десятичной записи представляет число 7.

Возьмем другое выражение 6 & 2 . Число 6 в двоичной записи равно 110, а число 2 — 10 или 010. Умножим соответствующие разряды обоих чисел. Произведение обоих разрядов равно 1, если оба этих разряда равны 1. Иначе произведение равно 0. Поэтому получаем:

1 1 0
0 1 0
0 1 0

Получаем число 010, что в десятичной системе равно 2.

Теперь рассмотрим последний пример — инверсию числа.

Представление отрицательных чисел

Для записи чисел со знаком в Си применяется дополнительный код (two’s complement), при котором старший разряд является знаковым. Если его значение равно 0, то число положительное, и его двоичное представление не отличается от представления беззнакового числа. Например, 0000 0001 в десятичной системе 1.

Если старший разряд равен 1, то мы имеем дело с отрицательным числом. Например, 1111 1111 в десятичной системе представляет -1. Соответственно, 1111 0011 представляет -13.

Чтобы получить из положительного числа отрицательное, его нужно инвертировать и прибавить единицу:

Поразрядная конъюнкция задачи 3

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

Что такое поразрядная конъюнкция? Это перевод чисел в двоичную систему, а потом разряд с разрядом умножаем. Например, 7 х 4. 7 перевожу в двоичную систему – 1 1 1. 4 перевожу в двоичную систему – 1 0 0. И умножаю разряд с разрядом – 111 х 100=100.

Давайте порешаем задачи.

«Введем выражение М & К, обозначающие поразрядную конъюнкцию М и К (логическое «И» между соответствующими битами двоичной записи). Определите наименьшее натуральное число А, такое, что выражение

Начнем с короткого обозначения. Выражение Х х 56 =0 обозначим как Х56, в коротком виде. Первое уравнение принимает вид . Нам нужно найти наименьшее натуральное А.

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

Теперь мой любимый прием – известная часть пусть будет нулем (0), тогда искомая часть обязана быть единицей (1)

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

С нулем работать не очень приятно, поэтому сделаю отрицание и будет единица.

На что мне надо умножить 48, чтобы получились одни нули?

У X должны быть в первом разряде нули, чтобы обнулить единицы у 48, а остальное не важно

И те же самые X я должна умножить на 56 и не получить ноль. Чтобы не получить ноль, мне нужно здесь поставить единицу, чтобы она зацепила единицу от 56

Дальше может стоять что угодно. Все такие X являются решением этого уравнения.

Второе уравнение говорит, что все такие X (001…) нужно умножить на А и не получить ноль.

На первой и второй позиции у А может стоять что угодно. Три последние позиции тоже без разницы. Нужно поймать единственную единицу.

Если у А будет здесь единица, я умножу А и Х и ноль не получу. Вот такое А должно быть.
Нужно найти наименьшее. Тогда остальные пусть будут нули.

А это значит 8 в десятичной системе.

Благодарим за то, что пользуйтесь нашими статьями. Информация на странице «Поразрядная конъюнкция задачи 3» подготовлена нашими авторами специально, чтобы помочь вам в освоении предмета и подготовке к ЕГЭ и ОГЭ. Чтобы успешно сдать нужные и поступить в высшее учебное заведение или техникум нужно использовать все инструменты: учеба, контрольные, олимпиады, онлайн-лекции, видеоуроки, сборники заданий. Также вы можете воспользоваться другими статьями из данного раздела.

Глава 4 операции и выражения

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

Назначение любого выражения – формирование некоторого значения. В зависимости от типа формируемых значений определяются типы выражений.

Если значениями выражений являются целые или вещественные числа, то говорят об арифметических выражениях.

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

Выражения отношения и логические выражениятрадиционно должны давать одно значение: истина или ложь. В СИ истина – всегда ненулевое значение, 0 – ложь.

Отношение определяется как пара арифметических выражений, соединенных (разделенных) знаком операции отношения.

Операндами логических выражений являются выражения отношения.

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

Ассоциативность

(); []; />; .

& (поразрядная конъюнкция “И”)

^ (поразрядное исключающее “ИЛИ”)

| (поразрядная дизъюнкция “ИЛИ”)

За исключением операций “[]”, “()” и “?:” все знаки операций распознаются компилятором как отдельные лексемы. В зависимости от контекста одна и та же лексема может обозначать разные операции, т.е. один и тот же знак операции может употребляться в различных выражениях и по разному интерпретироваться в зависимости от контекста.

Например, бинарная операция & – это поразрядная конъюнкция, а унарная & – это операция получения адреса.

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

Операции ранга 1 имеют наивысший приоритет.

Операции одного ранга имеют одинаковый приоритет, и если их в выражении несколько, то они выполняются в соответствие с правилом ассоциативности либо слева направо (), либо справа налево (). Если один и тот же знак операции приведен в таблице дважды (например знак *), то первое появление (с меньшим по номеру, т.е. старшим по приоритету, рангом) соответствует унарной операции, а второе – бинарной.

Унарные (одноместные) операции

Для изображения одноместных префиксных и постфиксных операций используются следующие символы:

& – операция получения адреса операнда. Нельзя &(x+1).

* – операция обращения по адресу, т.е. раскрытия ссылки, иначе операция разыменования (доступа по адресу к значению того объекта, на который указывает операнд). Оператором должен быть указатель.

– – унарный минус, изменяет знак арифметического операнда.

+ – унарный плюс, введен для симметрии с унарным минусом.

– поразрядное инвертирование внутреннего двоичного кода целочисленного аргумента – побитовое отрицание.

Пример:

Unsigned char a:

A=201: (=c9 (16) = 11001001(2))

A=54: (= 36 (16) = 00110110(2))

! – логическое отрицание (НЕ) значения операнда. Применяется к стандартным операндам. Целочисленный результат 0 (если операнд не нулевой, т.е. истинный) или 1 (если операнд нулевой, т.е. ложный). Напомним, что в качестве логических значений в языке используются целые числа: 0 – ложь и не нуль, т.е. (!0) – истина. Отрицание любого ненулевого числа будет 0, а отрицанием 0 будет 1. Таким образом: !1 равно 0; !2 равно 0; !(–5) равно 0; !0 равно 1;

++ – увеличение на единицу (инкремент или автоувеличение); имеет две формы:

++<имя> префиксная операция – увеличение значения операнда на 1 до его использования. Ассоциативность справа в соответствие со стандартом.

<имя>++ постфиксная операция – увеличение значения операнда на 1 после его использования. Ассоциативность слева в соответствие со стандартом.

выражение ++m увеличивает на 1 значение m, и это полученное значение используется как значение выражения ++m (префиксная форма).

выражение – – k уменьшает на 1 значение k, и это полученное значение используется как значение выражения – –k (префиксная форма).

выражение i++ (постфиксная форма) уменьшает на 1 значение i, однако значением выражения i++ будет предыдущее значение i (до его увеличения).

выражение j – – (постфиксная форма) уменьшает на 1 значение j, однако значением выражения j – – будет предыдущее значение j (до его уменьшения.

Например

rez= arg ++*2; // rez=8, arg=5

rez=++ arg *2; // arg=6, rez=12

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

В этих случаях трактовка однозначно и полностью определяется рангами операций (бинарные аддитивные + имеют ранг 4;унарные ++ и –– имеют ранг 2).Таким образом:

z– – –dэквивалентно (z– –)–d.

Операнд для операции ++ (и для операции – – ) не может быть константой либо произвольным выражением. Записи ++5 или 84++ будут неверными. ++(j+k) также неверная запись. Операндами унарных операций ++ и – – должны быть всегда модифицируемые выражения (L– value, left value, l – значение, леводопустимое выражение).

Термины «леводопустимое выражение» и «l–значение» происходят от объяснения действия операции присваивания E=D, в которой операнд Е слева от знака операции присваивания может быть только модифицируемым l – значением. Примером модифицируемого l – значения служит имя переменной, которой выделена память. L – значение – ссылка на область памяти, значение которой доступно изменениям.

Sizeof – операция вычисления размера (в байтах) для объекта того типа, который имеет операнд. Разрешается два формата операции:

Пример:

sizeof (20.0) 8 байтов

sizeof (a) 2байта

sizeof (b) 200байтов

sizeof (*x) 2байта

sizeof (int) 2байта

sizeof (date) 12байтов

Что такое поразрядная конъюнкция

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

х++ х+++ b — — n *2 n *=1

Три первых выражения имеют традиционную форму для язы­ков программирования высокого уровня, поэтому их смысл оче­виден. Следующие четыре выражения специфичны для языка Си.

Опишем набор операций, используемых в Си, а также правила записи и вычисления выражений. Напомним, что операция, при­меняемая к одному операнду, называется унарной, а операция с двумя операндами — бинарной.

Арифметические операции . К арифметическим операциям отно­сятся:

— вычитание или унарный минус;

+ сложение или унарный плюс;

% деление по модулю ;

++ унарная операция увеличения на единицу (инкремент);

— — унарная операция уменьшения на единицу (декремент).

Все операции, кроме деления по модулю, применимы к лю­бым числовым типам данных. Операция % применима только к целым числам.

Рассмотрим особенности выполнения операции деления. Если делимое и делитель — целые числа, то и результат — целое число. На­пример, значение выражения 5/3 будет равно 2, а при вычисле­нии 1/5 получится 0 .

Если хотя бы один из операндов имеет вещественный тип, то и ре­зультат будет вещественным. Например, операции 5./3, 5./3., 5/3. дадут вещественный результат 1.6666.

Операции инкремента и декремента могут применяться только к переменным и не могут — к константам и выражениям. Операция ++ увеличивает значение переменной на единицу, операция — — — умень­шает значение переменной на единицу. Оба знака операции могут записываться как перед операндом (префиксная форма), так и после операнда (постфиксная форма), например: ++х или х++, —а или а—. Три следующих оператора дают один и тот же ре­зультат:

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

В результате выполнения переменные получат следующие зна­чения: а = 4, b = 3, с= 6. Второй пример:

Результаты будут такими: а = 4, b = 3, с=12.

Объяснение следующее: при использовании постфиксной формы операции ++ и — — выполняются после того, как значение перемен­ной было использовано в выражении, а префиксные операции — до использования. Поэтому в первом примере значение переменной с вычислялось как произведение 3 на 2, а во втором — как произве­дение 4 на 3.

По убыванию старшинства арифметические операции распо­ложены в следующем порядке:

Одинаковые по старшинству операции выполняются в порядке слева направо. Д ля изменения порядка выполне­ния операций в выражениях могут применяться круглые скобки.

Операции отношения . В Си используется тот же набор операций отношения .

<= меньше или равно,

>= больше или равно, равно,

Как уже говорилось раньше, в стандарте Си нет логического типа данных. Поэтому результатом операции отношения является целое число: если отношение истинно — то 1, если ложно — то 0.

Результатом второго и третьего отношений будет 0 — ложь; результат четвертого отношения равен 1 — истина; результат пер­вого отношения зависит от значения переменной а.

Логические операции . Три основные логические операции в языке Си:

! операция отрицания (НЕ),

&& конъюнкция, логическое умножение (И),

| | дизъюнкция, логическое сложение (ИЛИ).

Например, логическое выражение, соответствующее системе неравенств 0 < x < 1 в программе на Си запишется в виде следую­щего логического выражения:

Обратите внимание на то обстоятельство, что здесь не понадо­бились круглые скобки для выделения операций отношения. В Си операции отношения старше конъюнкции и дизъ­юнкции. По убыванию приоритета логические операции и опера­ции отношения расположены в следующем порядке:

Помимо рассмотренных в Си имеются поразрядные логические операции. Эти операции выполняются над каждой парой соответ­ствующих двоичных разрядов внутреннего представления операн­дов. Их еще называют битовыми логическими операциями. Знаки битовых логических операций:

& поразрядная конъюнкция (И),

| поразрядная дизъюнкция (ИЛИ),

^ поразрядное исключающее ИЛИ,

поразрядное отрицание (НЕ).

Битовые логические операции вместе с операциями поразряд­ного сдвига влево (<<) и вправо (>>) позволяют добраться до каждого бита внутреннего кода. Чаще всего такие действия прихо­дится выполнять в системных программах.

Операция присваивания. Знак операции присваивания =. Следствием отме­ченного факта является то, что присваивание, как любой другой знак операции, может несколько раз входить в выражение. На­пример:

Присваивание имеет самый низкий приоритет (ниже только у операции «запятая»). Кроме того, операция присваивания — правоассоциативная. Это значит, что несколько подряд расположен­ных присваиваний выполняются справа налево. Поэтому в приве­денном выше выражении первой выполнится операция сложе­ния, затем переменной с присвоится значение суммы, затем это значение присвоится переменной b и в конце — переменной а.

В языке Си имеются дополнительные операции присваивания, совмещающие присваивание с выполнением других операций. Среди них: +=, -=, /=, *=, %=. Приоритет у них такой же, как и у простого присваивания. Примеры использования этих операций:

а+=2 эквивалентно а=а+2,

х-=а+ b эквивалентно х=х-(а+ b ),

р/=10 эквивалентно р=р/10,

m*=n эквивалентно m=m*n,

г%=5 эквивалентно г=г%5.

Заметим, что вместо выражения а=а+2 предпочтительнее пи­сать в программе а+=2, поскольку второе выражение будет вы­числяться быстрее.

Операция явного преобразования типа (операция «тип»). Приме­нение этой операции имеет следующий формат:

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

(long) 8, (float) 1 , (int) x%2

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

Следующий фрагмент программы иллюстрирует одну из прак­тических ситуаций, в которой потребовалось использовать преоб­разование типа:

В результате переменная с получит значение 0,5. Без преобразо­вания типа ее значение стало бы равно 0.

Операция sizeof . Эта операция имеет две формы записи:

sizeof (тип) и sizeof (выражение)

Результатом операции является целое число, равное количе­ству байтов, которое занимает в памяти величина явно указан­ного типа или величина, полученная в результате вычисления выражения. Последняя определяется также по типу результата выражения. Хотя по форме записи это похоже на функцию, од­нако sizeof является именно операцией. Ее приоритет выше, чем у бинарных арифметических операций, логических опера­ций и отношений. Примеры использования операции:

sizeof (int) результат — 2

sizeof (1) результат — 2

sizeof (0.1) результат — 8

sizeof (1L) результат — 4

sizeof (char) результат — 1

sizeof (‘ a’) результат — 2

Операция «запятая». Эта необычная операция используется для связывания нескольких выражений в одно. Несколько выражений, разделенных запятыми, вычисляются последовательно слева на­право. В качестве результата такого совмещенного выражения при­нимается значение самого правого выражения. Например, если переменная х имеет тип int, то значение выражения (х=3, 5*х) будет равно 15, а переменная х примет значение 3.

Операция условие ?: . Это единственная операция, которая име­ет три операнда. Формат операции:

выражение1 ? выражение2 : выражение 3

Данная операция реализует алгоритмическую структуру ветв­ления. Алгоритм ее выполнения следующий: первым вычисляется значение выражения 1, которое обычно представляет собой некоторое условие. Если оно истинно, т.е. не равно 0, то вычисляется выражение 2 и полученный результат становится результатом опе­рации. В противном случае в качестве результата берется значение выражения 3.

Пример 1. Вычисление абсолютной величины переменной X можно организовать с помощью одной операции:

Пример 2. Выбор большего значения из двух переменных аи Ь:

Пример 3. Заменить большее значение из двух переменных аи b на единицу:

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

Операции ( ) и [ ]. В языке Си круглые и квадратные скобки рассматриваются как операции, причем эти операции имеют наи­высший приоритет. Их смысл будет раскрыт позже.

Подведем итог всему разговору об операциях Си/Си++, сведя их в общую табл. 2 и расположив по рангам. Ранг операции — это порядковый помер в ряду приоритетов. Чем больше ранг, тем ниже приоритет. В таблице отражено еще одно свойство опера­ций — ассоциативность. Если одна и та же операция, повторя­ющаяся в выражении несколько раз, выполняется в порядке расположения слева направо, то она называется левоассоциа-тивной; если выполняется справа налево, то операция правоассоциативная. В таблице эти свойства отображены стрелками влево и вправо. Некоторые операции, присутствующие в таблице, пока не обсуждались.

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

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