Побитовое И (&), побитовое ИЛИ (|), побитовое XOR (^)

 

Побитовое И (&)
Битовые операторы выполняют свои расчеты на уровне битов переменных. Они помогают решать широкий круг общих проблем программирования. Большая часть материала ниже от отличный учебник по математике Побитовая wihch можно найти здесь.
Описание и синтаксис
Ниже приведены описания и синтаксис для всех операторов. Более подробную информацию можно найти в справочной учебник.
Побитовое И (&)
Побитовое И оператор в C + + является одним амперсанд, и, используемых между двумя другими целых выражений. Побитовое И действует на позиции каждого бита, окружающих выражение самостоятельно, в соответствии с этим правилом: если оба входных бита равны 1, полученный результат равен 1, в противном случае на выходе 0. Другой способ выразить это:
    0 0 1 1 operand1
    0 1 0 1 operand2
    ----------
    0 0 0 1 (operand1 и operand2) - возвращаемый результат
В Arduino, тип Int представляет собой 16-битное значение, поэтому использование и между двумя Int выражениями вызывает 16 одновременных и операции происходят. В фрагменте кода, как:
    Int = 92; / / в двоичном виде: 0000000001011100
    INT B = 101; / / в двоичном виде: 0000000001100101
    Int C = & B / / результат: 0000000001000100, или 68 в десятичной системе.
Каждый из 16 бит и б обрабатываются с помощью побитового AND, и все 16 бита полученного хранятся в C, в результате чего значение 01000100 в двоичном, что на 68 в десятичной системе.
Одним из наиболее распространенных видов использования побитового И это выбрать конкретный бит (или биты) с целым значением, часто называют маскировки. См. ниже пример
Побитовое ИЛИ (|)
Побитовое ИЛИ оператор в C + + является вертикальной чертой |. Как и оператор, | работает независимо каждого бита в двух окружающих целые выражения, но то, что она делает, это разные (конечно). Побитовое ИЛИ двух бит равен 1, если один или оба входных бита равна 1, в противном случае он равен 0. Другими словами:
    0 0 1 1 operand1
    0 1 0 1 operand2
    ----------
    0 1 1 1 (operand1 | operand2) - возвращаемый результат
Вот пример из побитового ИЛИ используется в фрагменте кода C + +:
    Int = 92; / / в двоичном виде: 0000000001011100
    INT B = 101; / / в двоичном виде: 0000000001100101
    Int C = A | B; / / результат: 0000000001111101, или 125 в десятичной системе.
Пример программы
Общая работа для битовых И и ИЛИ операторов является то, что программисты называют чтение-модификация-запись на порт. На микроконтроллеров, порт 8-битный номер, который представляет собой нечто о состоянии контактов. Запись в порт контролирует все контакты сразу.
PORTD является встроенный в постоянном который ссылается на выходе государства из цифровых выводов 0,1,2,3,4,5,6,7. Если есть 1 в битовой позиции, то, что контакт является высокой. (Контакты уже должны быть установлены на выходах с pinMode () команды). Таким образом, если мы пишем PORTD = B00110001; мы сделали контакты 2,3 и 7 высокая. Одна небольшая заминка в том, что мы может также changeed состоянии выводы 0 и 1, которые используются Arduino для последовательной связи таким образом, мы, возможно, мешали последовательной связи.
     Наш алгоритм программы:
Получите PORTD и очистить только биты, соответствующие выводы мы хотим управлять (с побитовое И).
Объединить изменения PORTD значение с новым значением для контактов под контролем (с biwise OR).
Int I; / / переменная счетчика
Int J;
 
пустоту установки () {
DDRD = DDRD | B11111100 / / Набор бит направления для контактов 2 до 7, оставьте 0 и 1 нетронутыми (хх | 00 == хх)
/ / Так же, как pinMode (контакт, OUTPUT) для контактов 2 до 7
Serial.begin (9600);
}
 
пустоту цикла () {
для (я = 0; I <64; я + +) {
 
PORTD = PORTD & B00000011 / / очистить биты 2 - 7, оставьте выводы 0 и 1 нетронутыми (хх и 11 == хх)
J = (я << 2); / / сдвиг переменной до контактами 2 - 7 - чтобы избежать выводы 0 и 1
PORTD = PORTD | J / / объединить информацию о порте с новой информацией для светодиодных контакты
Serial.println (PORTD, BIN); / / отладки, чтобы показать маскировки
задержка (100);
   }
}
Побитовое XOR (^)
Существует несколько необычный оператор в C + + называются побитовое исключающее ИЛИ, также известный как побитовое XOR. (На английском языке это обычно произносится как "экс-или".) Оператор побитового XOR написана с использованием символа каретки ^. Этот оператор очень похож на побитовое ИЛИ оператор |, только это имеет значение 0 для заданной битовой позиции, когда оба входных бита на эту должность являются 1:
    0 0 1 1 operand1
    0 1 0 1 operand2
    ----------
    0 1 1 0 (operand1 ^ operand2) - возвращаемый результат
Другой способ смотреть на побитовое XOR является то, что каждый бит результата равен 1, если входные биты различны, или 0, если они такие же.
Вот простой пример кода:
    Int х = 12; / / двоичное: 1100
    Int у = 10; / / двоичное: 1010
    Int г = х ^ у / / двоичное: 0110, или десятичное 6
Оператор ^ часто используется для переключения (т.е. изменение с 0 на 1 или 1 на 0) некоторые из битов в целочисленном выражении. В битовой операции ИЛИ, если есть 1 в бит маски, что бит инвертируется, если есть 0, бит не переворачивали и остается прежним. Ниже приведена программа мигать цифровой вывод 5.
/ / Blink_Pin_5
/ / Демо-версию для исключающее ИЛИ
пустоту установки () {
DDRD = DDRD | B00100000; / / установка цифровой контактный пять, как OUTPUT 
Serial.begin (9600);
}
 
пустоту цикла () {
PORTD = PORTD ^ B00100000 / / инвертировать бит 5 (цифровой вывод 5), оставить остальные нетронутыми
задержка (100);
}
См. также
&& (логическое И)
| | (логическое ИЛИ)
 

Программирование:

*