上周五晚上在公司加班,遇到一个bug,当时由公司大牛解决了,但是回想起来还是感觉哪里不对。思前想后最后直接上机测试。
备注一下,公司的程序运行在mips平台上,实验是在公司的服务器上(IA64/Linux):
我把问题抽离出来,基本就是如下所示:
程序很简单,a,b是int型数据,c是uint8_t型,c值由a和b强制转换并相加。
程序分别打印a,b,c的值,为了直观理解c值,我使用%x来显示它的16进制格式。
但奇怪的事情就是发生在这儿,c并非0x12。
现在在公司上班,没有时间细究,回去之后再在自己机器上测试一下。
这个问题我还是没明白怎么回事,需要查找一些资料,另外如果有谁能够知道其中缘由,请不吝赐教。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
It turns out an issue of operator priority.
Here operator "+" is level 4 and operator "&" is level5. So 0xF0 will combine with the last one first.
Damn it!
希望大家以后能从这个上面吸取一些教训,如果不确定优先级的时候,就用括号括起来。