我有一个问题。
document
在上述程序中,#include <stdio.h>
int main()
{
unsigned char i = 0x80;
printf("%d\n",i<<1);
return 0;
}
被赋予0x80(即128)。对于unsigned char
,我的值为256.我怀疑这里是i<<1
= 1000 0000二进制,但i
如何得到值256?为什么不是0,因为(1000 0000)&lt;&lt; 11将会被淘汰?
答案 0 :(得分:0)
如果在表达式中使用排名低于int
的变量,例如char
或unsigned char
,则在表达式之前将其提升为int
评价。
因此,您的unsigned char
值0x80将转换为int
值0x80,<<
运算符将应用于此值。那么高阶位不再是高阶位,所以它不会被移出。