在這個小程序:這個比較爲什麼會返回錯誤?
#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