在这个小程序:这个比较为什么会返回错误?
#include <unistd.h>
#include <stdint.h>
#include <stdio.h>
int main() {
uint8_t a = 0;
uint8_t b = 255;
if (a == (b + 1)) {
printf("Equal\n");
} else {
printf("Not equal\n");
}
if (a == ((b + 1) & 0xFF)) {
printf("Equal\n");
} else {
printf("Not equal\n");
}
}
我得到:
Not Equal
Equal
为什么不比较工作,除非我强行把最后8位?我猜我缺少一些无符号算术的细微差别...
我正在使用gcc 4.4.5,如果这有所作为。
啊哈,我以前从来没有听说过那样做。 – 2012-04-09 20:38:37
重要的不是'=='的操作数,它是'+'的操作数。 – 2012-04-09 20:39:25
我会不会猜到的!好想法。 – HWende 2012-04-09 20:40:32