この小さなプログラムでは:
#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を使用しています。