我想知道当我向左移位时,如何让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位数,而不只是输出正确的数字。
答案 0 :(得分:9)
它不会扩展您的数字,而是将其保存为unsigned int类型,其大小为4个字节(32位)。您只填写最后4位。要将其视为仅4位,请使用按位AND和掩码值。这是示例代码:
int main()
{
unsigned int binary_temp = 0b0100;
binary_temp = (binary_temp << 2) & 0b1111;
printf("%u", binary_temp);
return 0;
}
答案 1 :(得分:4)
您可以使用4位掩码值按位AND
结果:
binary_temp = (binary_temp << 2) & 0xF;
答案 2 :(得分:0)
标准C中没有0b
。您可以使用4
。
unsigned int /* prepare for wtf identifier: */
binary_temp = 4;
左移2乘以4.为什么不呢?
binary_temp *= 4;
...然后减少modulo 16?
binary_temp %= 16;
在这种情况下,使用二元运算符有什么意义?我没有看到。
%d
指令对应int
参数,但您提供的参数printf
为unsigned int
。这是未定义的行为。
printf("%u", binary_temp);
我确信您正在阅读的任何一本书都会告诉您%u
指令。