C中的位移位

时间:2011-02-02 19:58:43

标签: c

我如何做以下事项:

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。

4 个答案:

答案 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。

相关问题