【发布时间】:2011-03-23 08:37:42
【问题描述】:
#include <stdio.h>
int main()
{
unsigned char i=0x80;
printf("%d",i<<1);
return 0;
}
为什么这个程序打印 256?
据我了解,由于 0x80= 0b10000000,并且 unsigned char 有 8 位,“1”应该在左移后溢出,输出应该是 0,而不是 256。
【问题讨论】:
-
不想作为答案发布,因为我不是 100% 确定,但不是因为 %d 是整数吗?因此,幕后的代码可能会将
i<<1分配给一个整数来打印它,这意味着它适合并且不会溢出。试试printf("%c", i<<1);? -
@Stephen:应该已经发布了答案;)
-
@Stephen: 当我使用 %c 时输出是空白的。
-
哦,好吧,我想我是在正确的轨道上。抱歉 %c 不起作用 - 我没有编译器可以检查它!
-
在大多数编译器上,
i << n将产生一个整数,而不管原始类型如何。
标签: c bit-manipulation unsigned-char