在这个小程序中:
#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。