我知道如何设置位、清除位、切换位以及检查是否设置了位。
但是,我如何将位,例如 byte_1 的 nr 7 复制到 byte_2 的位 nr 7 ?
没有 if 语句是可能的(不检查位的值)?
#include <stdio.h>
#include <stdint.h>
int main(){
int byte_1 = 0b00001111;
int byte_2 = 0b01010101;
byte_2 = // what's next ?
return 0;
}
我知道如何设置位、清除位、切换位以及检查是否设置了位。
但是,我如何将位,例如 byte_1 的 nr 7 复制到 byte_2 的位 nr 7 ?
没有 if 语句是可能的(不检查位的值)?
#include <stdio.h>
#include <stdint.h>
int main(){
int byte_1 = 0b00001111;
int byte_2 = 0b01010101;
byte_2 = // what's 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
是相同值的情况。