ast*_*nic 13 c bit-manipulation
我知道如何设置一个位,清除一点,切换一下,并检查是否设置了一个位.
但是,我如何将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;
}
Run Code Online (Sandbox Code Playgroud)
eme*_*esx 23
byte_2 = (byte_2 & 0b01111111) | (byte_1 & 0b10000000);
Run Code Online (Sandbox Code Playgroud)
您需要首先读取该位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;
Run Code Online (Sandbox Code Playgroud)
请注意,另一个答案中的公式(如果将其扩展为使用变量,而不仅仅是第7位)适用于其中read_from和write_to是相同值的情况.