菜鸟问题 - 为什么这会导致有符号整数溢出?
我想testNum能容纳这么大的数量吗?
int main(int argc, char* argv[]) {
int a = 500000000;
int b = 5;
uint64_t testNum = a * b;
std::cout << testNum << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
我收到以下运行时错误
runtime error: signed integer overflow: 500000000 * 5 cannot be represented in type 'int'
Run Code Online (Sandbox Code Playgroud)
我发现有两种解决方法:
uint64_ta * b在like前面插入“类型转换”uint64_t testNum = (uint64_t) a * b;我不确定的是,为什么如果没有解决方法,这段代码就无法工作?
a * b在将其分配给 之前完成testNum,并且a和b都是int并且两个相乘的结果int是 an int。
因为(uint64_t) a * b; 被a转换为uint64_t然后乘以b。
作为附加说明:在大多数情况下,您希望避免 c 风格的情况 ( (type)),而是希望使用明确说明必须执行什么转换的转换,例如static_cast<uint64_t>(a)。