a + b
Überläufe 255 zurück zu 4, wie ich erwarten würde, dann c/2
gibt 2, wie ich es erwarte. Warum aber ist das letzte Beispiel bei der Auswertung der beiden gleichen Schritte nicht übergelaufen?C überläuft innerhalb einer Gleichung?
Ich vermute, die internen Berechnung Werte werden mit mehr Bits gespeichert, dann nur auf 8 Bit gekürzt, wenn Sie die Zuweisung tun. In diesem Fall, wo ist das Limit, muss es irgendwann überlaufen?
uint8_t a = 250;
uint8_t b = 10;
uint8_t c = (a + b);
uint8_t d = c/2;
uint8_t e = (a + b)/2;
std::cout << unsigned(c) << ", " << unsigned(d) << ", " << unsigned(e) << "\n";
4, 2, 130
Vielleicht finden Sie [** diese **] (http://ideone.com/WBVJ8t) interessant. Beachten Sie den abgeleiteten Parametertyp. – WhozCraig