a + b
予想どおり 255 が 4 にオーバーフローし、予想どおりc / 2
2 が返されます。しかし、同じ 2 つのステップを評価するときに最後の例がオーバーフローしないのはなぜでしょうか?
内部計算値はより多くのビットで保存され、割り当てを行うときに8ビットに切り捨てられるだけだと思います。その場合、限界はどこにあるのでしょうか。
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