0

我想知道当我向左移位时如何让 C 不扩展我的二进制数

int main ()
{
    unsigned int binary_temp = 0b0100;
    binary_temp = binary_temp << 2;
    printf("%d", binary_temp);
    return 0;
}

当我运行它时,我想要一个返回值 0,因为它已经超过了我拥有的 4 位数字,但现在它返回 16(10000)。我如何让 C 不延长我的号码?

编辑:我希望能够使用二进制形式的数字,所以我只需要 4 位数字,而不仅仅是输出正确的数字。

4

3 回答 3

9

它不会扩展您的号码,而是将其保存为大小为 4 字节(32 位)的 unsigned int 类型。您只填充最后 4 位。要将其视为仅 4 位,请使用按位与掩码值。这是示例代码:

int main()
{
    unsigned int binary_temp = 0b0100;
    binary_temp = (binary_temp << 2) & 0b1111;
    printf("%u", binary_temp);
    return 0;
}
于 2013-04-21T03:54:50.853 回答
4

您可以AND使用 4 位掩码值按位计算结果:

binary_temp = (binary_temp << 2) & 0xF;
于 2013-04-21T03:53:23.070 回答
0

标准 C中没有0b。您可以使用4.

unsigned int /* prepare for wtf identifier: */
             binary_temp = 4;

左移 2 乘以 4。为什么不呢?

binary_temp *= 4;

...然后减少模16?

binary_temp %= 16;

在这种情况下,使用二元运算符有什么意义?我没有看到。

%d指令对应于一个int参数,但您给出的参数printf是一个unsigned int. 那是未定义的行为。

printf("%u", binary_temp);

我敢肯定,无论您正在阅读哪本书,都会告诉您有关该%u指令的信息。

于 2013-04-21T04:30:18.127 回答