Не съм сигурен кога трябва да се тревожа за препълване, когато използвам неподписани знаци. Този случай е ясен:
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 преди извършване на изваждането?
Или също в този случай:
float e = (a - b) + (a - c);
И трите променливи преобразуват ли се в float?
Има ли възможни случаи, при които може да възникне препълване, дори когато променливата, на която е присвоена, е плаваща стойност? Правилата същите ли са, ако e е float, или int, или нещо друго?
Освен това какво се случва в случай като този:
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