c

时间:2019-01-30 14:30:12

标签: c bit-shift

有什么区别?为什么会有 3 (???)个不同的结果?

signed char b;
b = 66 << 2 >> 8;
fprintf(stdout, "%d\n", b);

输出:“ 1”

signed char b;
b = 66 << 2;
b = b >> 8;
fprintf(stdout, "%d\n", b);

输出:“ 0”

signed char b;
b = 2 >> 8;
b = 66 << b;
fprintf(stdout, "%d\n", b);

输出:“ 66”

感谢帮助!

1 个答案:

答案 0 :(得分:3)

signed char b = 66 << 2 >> 8;

在这里,66 << 2变成了signed int 264(signed int,因为它是中间结果),它被移位了>> 8,变成了1。

signed char b = 66 << 2;

在这里,将264(与上面相同)“压”入signed char,将其变为8。在此处应用>> 8的结果为0。

好吧,您的第三个示例2 >> 8显然为0,因此66保持不变。