我必须说出 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);
}
谢谢
最佳答案
虽然这不是一个好主意,但让我们尝试分解您的操作。
你给了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
.
关于c - 在 c 中使用位输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45320217/