gpt4 book ai didi

c++ - 为什么在这段代码中隐式类型转换的结果不正确?

转载 作者:太空狗 更新时间:2023-10-29 19:40:17 25 4
gpt4 key购买 nike

#include <iostream>

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

65536 的平方显然超出了int 的范围。现在,如果我将 temp 声明为 int,我就会明白为什么会失败。但即使它是 long long ,输出始终是 0。我相信这在某种程度上与隐式类型转换有关,但我不明白为什么结果是 0

这是因为 c++ 根本不允许将 int 转换为 long 吗?如果是这样,那么为什么这适用于较小的数字?

最佳答案

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

number * numberint 算术中计算,因为两个参数都是 int 类型。由于 int 溢出,您的程序的行为未定义

您想要将结果分配给 long long 的事实无关紧要。

一种解决方案是编写 1LL * number * number 以强制将参数提升为 long long 类型。

关于c++ - 为什么在这段代码中隐式类型转换的结果不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42810355/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com