有什么区别?为什么会有 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”
感谢帮助!
答案 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
保持不变。