我必须说出w = 33的程序输出。我不知道该怎么做。有没有人知道如何在不编写每个数字的二进制表示的情况下解决这个问题?
void notChicken(int w)
{
unsigned int v1 = 0x12345678;
unsigned int v2 = 0x87654785;
unsigned int v3 = 0xffffffff;
unsigned int tmp;
tmp = (v1 >> 3) | (v2 << 3);
tmp &= v3 & ~(v3 << (w >> 1));
printf("%8x\n", tmp);
}
由于
答案 0 :(得分:2)
虽然不是一个好主意,但我们试着打破你的行动。
您已w = 33
最后一部分 -
v3 & ~(v3 << (w >> 1))
将评估为v3 & ~(v3 << 16)
v3 << 16
0xffff0000
且~
为0xffff
因为v3
是你得到的所有0xffff
。这将屏蔽前一次计算的高16位。
现在(v1 >> 3) | (v2 << 3);
我们只关心低16位。
>> 3
除以8,<< 3
乘以8。
所以第一部分的结果将是
0x2468ACF | 0x3B2A3C28
仅保留低16位
0x8ACF | 0x3C28
最后,我不知道如何在不编写按位表示的情况下进行OR。我可以帮助最后一个十六进制。它将是F
。