有什么不同?为什么有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”
谢谢你的帮助!

最佳答案

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

这里,66 << 2变成signed int264(signed int因为它是一个中间结果),移位>> 8,变成1。
signed char b = 66 << 2;

这里,264(与上面相同)被“按下”成signed char,将其变成8。在这里应用>> 8将得到0。
好吧,第三个例子,2 >> 8是0,所以66保持不变。

关于c - c中移位位的正确顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54442891/

10-09 06:05