a + b
переполняет 255 назад до 4, как и следовало ожидать, тогда c/2
дает 2, как я ожидаю. Но тогда почему последний пример не переполняется при оценке тех же двух шагов?C переполняется внутри уравнения?
Я предполагаю, что внутренние значения вычислений хранятся с большим количеством бит, а затем сокращаются до 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
Вы можете найти [** this **] (http://ideone.com/WBVJ8t) интересно. Обратите внимание на тип выводимого параметра. – WhozCraig