我今天闲的蛋疼帮你分析一下。
具体结果确实超乎想象,应该是编译器的问题,你debug一下跳到汇编看看到底是什么鬼,按理来说,这两个结果都是不对的,如果你所贴的代码和你实际运行的代码一样的话。
具体分析如下:
Result = A<<16 + B<<8 + C; 等价于Result = A<<(16+B)<<(8+C); => Result = A<<534;
第二个表达式为(long)A<<534;
具体结果超乎我的想想,我没记得C标准有过这方面的解释。但是无论怎样解释,似乎都得不到你编译器出来的结果。
所以,如果你不想深究,只是想得到正确的结果的话,就这么写:
Result = (A << 16UL) + (B<<8) + C;
应该是运算符+比<<的优先级要高 这样改下试试
Result =( (long int)A<<16) +((int) B<<8) + C;
看来还是跟运算优先级有关系的,一般为了避免这个或者为了不产生歧义,多加括号啦。