Ответ 1
byte_2 = (byte_2 & 0b01111111) | (byte_1 & 0b10000000);
Я знаю, как установить бит, очистить бит, переключить бит и проверить, установлен ли бит.
Но как я могу копировать бит, например 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;
}
byte_2 = (byte_2 & 0b01111111) | (byte_1 & 0b10000000);
Вам нужно сначала прочитать бит из 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
являются одинаковыми значениями.