c - 在 c 中使用位输出

标签 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);
}

谢谢

最佳答案

虽然这不是一个好主意,但让我们尝试分解您的操作。

你给了w = 33

最后一部分——

v3 & ~(v3 << (w >> 1))将评估为 v3 & ~(v3 << 16)

v3 << 160xffff0000~其中是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/

相关文章:

python - 以读取模式 Python 3 读取二进制文件 - 在 Windows 上通过,在 Linux 上失败

php - PHP sqlsrv 驱动程序和 PDO 驱动程序之间的数据类型差异

c - c中相同代码的不同答案

c - 如何在循环中读取多个输入

GNU 语句表达式的编译器支持

c - C 输出中的随机字节

c - glviewport 和 win32 api

c++ - 类对象成员的顺序对性能有影响吗?

binary - 如何将二进制值输入 Rust 中的向量?

java - java 6 中的二进制值