我如何做以下事项:
unsigned short x = 0xFFFF;
unsigned short y = 0xAE;
x |= y & 1;
x |= y & (1 << 1);
x |= y & (1 << 2);
x |= y & (1 << 3);
x |= y & (1 << 4);
x |= y & (1 << 5);
x |= y & (1 << 6);
x |= y & (1 << 7);
x |= y & (1 << 8);
x |= y & (1 << 9);
x |= y & (1 << 10);
x |= y & (1 << 11);
x |= y & (1 << 12);
x |= y & (1 << 13);
x |= y & (1 << 14);
x |= y & (1 << 15);
printf("%x", x);
我希望x等于0xAE,但它仍然等于0xFFFF。
答案 0 :(得分:3)
所有位都已在x中设置 - 因此对它的任何|=
操作都不会改变它。
答案 1 :(得分:3)
无需单独处理每个位。整个方法可以简单地简化为
x &= y;
答案 2 :(得分:1)
我认为你的意思是从
开始unsigned short x = 0x0000;
答案 3 :(得分:0)
C正在计算正确的事情,因为你在这里做的是y,并且每次从0到15进行AND运算,这确实产生了AE。然而,那时你正在做OxFF | oxAE是oxFF。尝试将分配运算符设置为&=
。那将是0xFF&amp; 0xAE即0xAE。