为什么隐式类型转换在此代码中导致错误?

zek*_*eke 3 c++ types

#include <iostream>

int main()
{
    int number=65536;
    long long temp=number*number;
    std::cout << temp << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

广场65536明显超出了int范围.现在,如果我宣布tempint,我会理解为什么这会失败.但即便如此long long,输出总是如此0.我相信这与隐式类型转换有些相关,但我不明白为什么结果如此0.

这是因为c ++根本不允许转换intlong?如果是这样,为什么这个数字较小?

Bat*_*eba 10

(注意,a的范围int可以小到-32767到+32767.)

number * numberint由于两个参数都是类型,因此在算术中进行计算int.由于您的溢出,您的程序的行为是不确定的int.

您想要将结果分配给a的事实long long是不相关的.

一种解决方案是写入1LL * number * number强制推广long long类型的参数.