Я потратил некоторое время на траление этого сайта; в частности, этот вопрос: Является ли ((a + (b и 255)) и 255) такими же, как ((a + b) и 255)?
При этом я пришел к выводу, что
int main()
{
unsigned short i = std::numeric_limits<unsigned short>::max();
unsigned short j = i;
auto y = i * j;
}
может привести к поведению undefined из-за продвижения типа i
и j
до int
, который затем переполняется при умножении! Возможно, i
и j
не обязательно должны быть такими большими.
Я пришел к выводу, что, например, в системе, где unsigned short
- 16 бит, а int
- 32 бита, поведение может быть undefined.
Я исправлю здесь?