如何用char表示256?

时间:2013-07-18 14:59:27

标签: c

我在xcode中运行了以下代码,令我惊讶的是答案是256。 由于char只有8位长,我预计这将是0。 将8中的1个倾倒。 有人可以解释发生了什么吗?

int main()
{
    unsigned char i = 0x80;
    printf("%d\n", i<<1);
    return 0;
}

3 个答案:

答案 0 :(得分:1)

执行i << 1时,它会被提升为整数。例如,SHL在x86中对32位字(即使c类型为8位)起作用,因此移位的位不会从32位寄存器中丢弃。当您使用"%d"打印此区域时,您会获得256。如果您想使用unsigned char左移,您可以随时(i << x) & 0xff

答案 1 :(得分:1)

它被提升为一个整数,可以包含256的值就好了。对unsigned char的强制转换会为您提供预期的结果:

printf("%d\n", (unsigned char)(i<<1) );

答案 2 :(得分:0)

在这种情况下,发生的事情是i<<1的中间结果是一个整数,可以表示256。