Операции с битами (Arduino)

     | — старший бит

0b11110000

                  | — младший бит

DEC  BIN

0        0B00000000

1        0B00000001

2        0B00000010

3        0B00000011

4        0B00000100

5        0B00000101

6        0B00000110

7        0B00000111

Битовое И (&)

Если оба входных бита равны 1, результирующий бит равен 1, в ином случае бит равен 0.

 byte a = 0b00111001;
 byte b = 0b11001100;

 byte x = a & b // 0b00001000

Битовое ИЛИ (|)

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

  byte a = 0b00111001;
  byte b = 0b11001100;

  byte x = a | b; // 0b11111101

Битовое XOR (^)

Результат операции побитового XOR двух бит будет равен 1, если хотя бы один из этих битов 1, и вернет 0, если оба бита будут равны 1.

  byte a = 0b00111001;
  byte b = 0b11001100;

  byte x = a ^ b; // 0b11110101

Битовое НЕ (~)

Побитовое НЕ меняет каждый бит на противоположный: 0 становится 1, а 1 становится 0.

  int a = 0b000111100111001;
  int x =  ~a; // 0b111000011000110 

Битовый сдвиг влево (<<)

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

  int a = 0b000111100111001;
  int x = a << 3; // 0b111100111001000

Битовый сдвиг вправо (>>)

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

  int a = 0b000111100111001;
  int x = c >> 3; // 0b000000111100111  

Составное битовое И(&=)

Оператор составного побитового И (&=) работает аналогично побитовому И, полученный результат присваивается первому значению.

Оператор составного побитового И (&=) часто используют чтобы перевести отдельные биты переменной в низкий уровень (0).

Пример очистки байта а, сброс всех битов кроме 3-го:

   byte a = 0b00001111;
   byte b = 0b00001000;
         // 0b00001000
   a &= b; //  a = a & b  

Составное битовое ИЛИ (|=)

Оператор составного побитового ИЛИ (|=) работает аналогично побитовому ИЛИ, полученный результат присваивается первому значению.

Оператор составного побитового ИЛИ (|=) часто используют чтобы перевести отдельные биты переменной в высокий уровень (1).

Пример перевода 4-го бита в высокий уровень:

   byte a = 0b00001111;
   byte b = 0b00010000;
         // 0b00011111
   a |= b; //  a = a | b  

Запись единичного бита

  byte a = 0b00000000;  // запись лог. 1 в 6 бит
  byte x = a |= (1 << 6);  // 0b01000000
  byte a = 0b11111111;  // запись лог. 0 в 6 бит
  byte x = a &= ~(1 << 6);  // 0b10111111
  byte a = 0b11111111;  // инверсия 5 бита
  byte x = a ^= (1 << 5);  // 0b11011111

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

Войти с помощью: