gpt4 book ai didi

c++ - 数据类型限制

转载 作者:太空宇宙 更新时间:2023-11-04 16:06:17 26 4
gpt4 key购买 nike

以下代码为某些值打印了错误的输出,而为其他值打印了正确的输出。例如 699838110 的输出是 2938640281442109880 而它应该是 2938640272852175288

#include <iostream>
#include<cmath>
using namespace std;

int main()
{
int n;
cin>>n;
for(int i=0; i<n; i++)
{
int d;
cin>>d;
if(d==1)
{
cout<<1<<endl;
}
else
{
long long int y=pow(d,2);
long long int x=8+6*y-12*d;
cout<<x<<endl;
}
}
return 0;
}

出现这种情况是因为数据类型 long long int 的限制吗??如果不是定义 x,我直接在我的 cout 语句中写入 8+6*d*d-12*d 然后生成一个垃圾值。这是否意味着 cout 语句有限制。如果是,那么这个限制是什么,还是由参与计算的变量的数据类型决定?

最佳答案

12*d 将被计算为 int,而不是 long long int。事实上,它是在一个更大的表达式中产生一个 long long int 并没有改变这一点。

如果您的 int 是 32 位的,那么 12*d 将会溢出。那是未定义的行为。实际上,int 不需要表示大于 32767 的值,即使 32 位整数(能够容纳大约 2147483647 或so) 在实践中更常见。

所以你的问题与流的限制无关。它与表达式中的变量类型和结果有关。

关于c++ - 数据类型限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34782649/

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