У меня возникла странная вещь, когда я программировал под С++. Это о простом умножении.
код:
unsigned __int64 a1 = 255*256*256*256;
unsigned __int64 a2= 255 << 24; // same as the above
cerr()<<"a1 is:"<<a1;
cerr()<<"a2 is:"<<a2;
Интересно, что результат:
a1 is: 18446744073692774400
a2 is: 18446744073692774400
тогда как это должно быть: (используя калькулятор подтверждает)
4278190080
Может ли кто-нибудь сказать мне, как это возможно?