挺有意思一道题。
方案1(位或 + 位异或):
N: 00110000100001011 100110111 001111 (3085CDCF) 原题
101011011 <- 要求替换
111111111 000000 (32704) <- 对N进行位或操作,可将7-15位全替换成1
010100100 000000 (10496) <- 替换成1后,进行位异或操作,其余数字不管,指定的数变成0
int n = 0x3085CDCF; //814075343
n |= 32704;
n ^= 10496; //得到答案
方案2(位段):
struct A {
unsigned int a : 6;
unsigned int b : 9;
unsigned int c : 17;
};
int main() {
int n = 0x3085cdcf;
A* p = (A*)&n;
p->b = 347;
printf("%x",n);
return 0;
}