Вам нужно 0x400000B0 * 4L
, иначе умножение переполнится.
Я предполагаю, что ответ Дэвида работает для некоторых компиляторов, но в компиляторе Microsoft я все же получил предупреждения и тот же результат. В какой-то документации на C ++ я заметил, что «long» обеспечивает только «ширину не менее 32 бит». Поэтому я изменил тип переменной и тип выражения на long long;
long long _varLLxxLL = 0x400000B0 * 4LL;
std::cout << "_varLLxxLL has value " << _varLLxxLL
<< ", the expression had type " << typeid(0x400000B0 * 4LL).name() << "\n";
Вывод:
_varLLxxLL имеет значение 4294968000, выражение имело тип __int64
blockquote >Сравнить с:
long _varLxxxLx = 0x400000B0 * 4L; std::cout << "_varLxxxLx has value " << _varLxxxLx << ", the expression had type " << typeid(0x400000B0 * 4L).name() << "\n";
Вывод:
_varLxxxLx имеет значение 704, выражение имеет тип long
blockquote>оставьте вопрос открытым пока.