In diesem kleinen Programm:Warum gibt dieser Vergleich false zurück?
#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");
}
}
ich:
Not Equal
Equal
Warum 8 Bits nicht der Vergleich der Arbeit, es sei denn ich nehme gewaltsam die letzten? Ich vermute, dass mir hier etwas Nuance von vorzeichenloser Arithmetik fehlt ...
Ich benutze gcc 4.4.5, wenn das einen Unterschied macht.
Aha, davon hatte ich noch nie gehört, das würde es tun. –
Es sind nicht die Operanden von '==' das ist wichtig, es sind die von '+'. –
Ich hätte das niemals erraten! Guter Gedanke. – HWende