a + b
正如我所料,将 255 溢出回 4,然后c / 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