查询左移无符号字符

时间:2017-07-16 23:52:20

标签: c bit-manipulation

我有一个问题。

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将会被淘汰?

1 个答案:

答案 0 :(得分:0)

如果在表达式中使用排名低于int的变量,例如charunsigned char,则在表达式之前将其提升为int评价。

因此,您的unsigned char值0x80将转换为int值0x80,<<运算符将应用于此值。那么高阶位不再是高阶位,所以它不会被移出。