2012-06-25 1 views
13

Я знаю, как установить бит, немного очистить, переключить бит и проверить, установлен ли бит.Операции бит бит/копирование одного бита из одного байта в другой байт

Но как я могу скопировать бит, например 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's next ? 

    return 0; 
} 
+0

Вы ищете, как это сделать за одну операцию? Если нет, вы делаете то, что уже знаете, как это сделать: проверьте бит в байте1, проверьте бит в байте2, если они не совпадают, установите бит в байте2. –

+0

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

+0

Возможный дубликат [Установка бита без знака с другим битом другого символа без знака без условного выражения] (http: //stackoverflow.com/questions/11170740/setting-a-bit-of-an-unsigned-char-with-the-another-bit-of-another-unsigned-char) – Heisenbug

ответ

23
byte_2 = (byte_2 & 0b01111111) | (byte_1 & 0b10000000); 
+5

Некоторые важные изменения в голосовании происходят здесь .... wtf это? –

+1

geezzz ... голосование # на этом мигает каждые полсекунды ... – Mysticial

+0

@EitanT да это будет 0 – emesx

6

Вам нужно сначала прочитать немного из 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 имеют одинаковое значение.

+0

Если бит чтения равен 0, это не будет записывать его в байт, который уже имеет 1 в этой позиции бита. –

+0

@CoreyOgburn, правый. Я обновил ответ – Shahbaz

Смежные вопросы