使用c

时间:2017-07-26 07:28:29

标签: c binary

我必须说出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);
}

由于

1 个答案:

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