Я не уверен, когда мне нужно беспокоиться о переполнении при использовании беззнаковых символов. Этот случай ясен:
uint8_t a = 3;
uint8_t b = 6;
uint8_t c = a - b; // c is 253
Однако, что здесь происходит:
float d = a - b; // d is -3
Оба a и должны быть преобразованы в число с плавающей запятой перед выполнением вычитания?
Или также в этом случае:
float e = (a - b) + (a - c);
Все три переменные преобразуются в числа с плавающей запятой?
Возможны ли случаи, когда может произойти переполнение, даже если присваиваемая переменная является числом с плавающей запятой? Являются ли правила одинаковыми, если e является числом с плавающей запятой, целым числом или чем-то еще?
Кроме того, что происходит в таком случае:
int a = std::abs(a - b);
uint8_t c = a - b;
означаетuint8_t c = (uint8_t)((int)a - (int)b);
, который производит обернутый результат после приведения - person phuclv   schedule 06.08.2015