我知道如何设置一个位,清零一位,切换一下,并检查是否设置了一个位。
但是,我如何将bit,例如byte_1的nr 7复制到byte_2中的bit 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;
}
答案 0 :(得分:23)
byte_2 = (byte_2 & 0b01111111) | (byte_1 & 0b10000000);
答案 1 :(得分: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
具有相同值的情况。