在这个小程序中:
#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");
}
}
Run Code Online (Sandbox Code Playgroud)
我明白了:
Not Equal
Equal
Run Code Online (Sandbox Code Playgroud)
除非我强行拿最后8位,为什么比较不起作用?我猜我在这里遗漏了一些无符号算术的细微差别......
如果这有所不同,我正在使用gcc 4.4.5.
由于整数提升,==和+运算符的两个操作数都被提升为int.
表达方式:
a == (b + 1)
Run Code Online (Sandbox Code Playgroud)
等于:
0 == 256
Run Code Online (Sandbox Code Playgroud)
这是假的.
表达式:a == (uint8_t) (b + 1)将为您提供您期望的结果(true).另一个解决方案是& 0xFF在你的第二个if声明中使用,