2014 八月 | 重归混沌的BLOG

一个类型提升的bug

今天碰到一个由于类型提升的bug, 即使找到bug后, 仍花了好大功夫才找到解释, 感觉此坑比较隐蔽, 在此小记一下. 有类似下面一段代码: unsigned char a; unsigned char b; a = -1; b = 0; if (a == b - 1) printf("equal"); else printf("not equal"); 理论上当a为-1, b为0时应该打印出equal. 可事实恰恰相反, 打印出来的是not equal. C语言中有以下类型提升规则: 2. 一般常数为int型 1. 二元操作符如果两个操作数具有不同的类型, 那么将较低的类型提升为较高的类型……