Подтвердить что ты не робот

C бит/копирование одного бита из одного байта в другой байт

Я знаю, как установить бит, очистить бит, переключить бит и проверить, установлен ли бит.

Но как я могу копировать бит, например nr 7 byte_1, в бит nr 7 в byte_2?

Возможно ли без оператора if (без проверки значения бит)?

#include <stdio.h>
#include <stdint.h>
int main(){
  int byte_1 = 0b00001111;
  int byte_2 = 0b01010101;

  byte_2 = // what next ?

  return 0;
}
4b9b3361

Ответ 1

byte_2 = (byte_2 & 0b01111111) | (byte_1 & 0b10000000);

Ответ 2

Вам нужно сначала прочитать бит из byte1, очистить бит на byte2 и or бит, который вы читали ранее:

read_from = 3;  // read bit 3
write_to = 5;   // write to bit 5

the_bit = ((byte1 >> read_from) & 1) << write_to;
byte2 &= ~(1 << write_to);
byte2 |= the_bit;

Обратите внимание, что формула в другом ответе (если вы расширите ее до использования переменных вместо бита 7) для случая, когда read_from и write_to являются одинаковыми значениями.