gpt4 book ai didi

c++ - 从低到高的隐式转换

转载 作者:太空宇宙 更新时间:2023-11-04 12:42:11 25 4
gpt4 key购买 nike

我有以下函数可以找到 4 个数字的最小总和和最大的一个:

void miniMaxSum(vector<int> arr)
{
std::sort (arr.begin(), arr.end()); //(12 32 45 71)26 80 53 33
unsigned long long minSum = arr[0] + arr[1] + arr[2] + arr[3];
unsigned long long maxSum = (unsigned long long) arr[arr.size() - 1] + (unsigned long long) arr[arr.size() - 2] + (unsigned long long) arr[arr.size() - 3];
cout << arr[arr.size() - 1] << " " << arr[arr.size() - 2] << " " << arr[arr.size() - 3] << " " << arr[arr.size() - 4] << " " << endl;
cout << minSum << " " << maxSum << endl;
}

现在,如果我省略 (unsigned long long) 转换,我会发生溢出。有谁知道为什么?编译器不应该自动将 int 转换为 unsigned long long 吗?

最佳答案

感谢您的评论! @JeJo 上面给出了答案。更具体地说:

如果我们省略所有 (unsigned long long) 转换,那么加法运算的结果将是一个整数(溢出),随后将转换为 unsigned long long。为防止溢出,我们只需要保留其中一个 (unsigned long long) 强制转换,因为这样一个加法数是 ULL,加法操作的其他部分也将被转换。因此,加法运算的结果将是一个无符号长整数。

关于c++ - 从低到高的隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53692321/

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