我不得不说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("%8xn", tmp);
}
谢谢
虽然不是一个好主意,但让我们尝试分解您的操作。
你已经给了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
.