gpt4 book ai didi

c++ - 整数不会超过随机数

转载 作者:行者123 更新时间:2023-12-01 14:18:14 27 4
gpt4 key购买 nike

最近开始学习C++,做了这个小程序

#include <iostream> // for std::cout << / std::cin >> / std::endl; / '\n'
#include <cstdlib> // for EXIT_SUCCESS and EXIT_FAILURE


int input()
{
int imp_num{ 0 };
std::cin >> imp_num;
return imp_num;
}
void output(int result)
{
std::cout << "The dubble of that number is : " << result << '\n';
}
int main()
{
std::cout << "Enter a number: ";
int inp_num{ input() }; // asks the user to enter a number and saves it
int result{ inp_num * 2 }; // calculates the result
output(result); // outputs the result


system("pause"); //prevents the console from terminating
return 0;
}

当恢复的数字为 10 位或更多时,就会出现问题。那时程序只是一个随机数(通常是 -2),无论我输入什么,它都将始终保持不变,并且只有在我重新编译源代码时才会发生变化。

Enter a number: 23213231231231212312
The dubble of that number is : -2
Press any key to continue . . .
Enter a number: 12311111111111111111111111
The dubble of that number is : -2
Press any key to continue . . .

我重新编译源码

Enter a number: 1231212123133333333333321
The dubble of that number is : 3259
Press any key to continue . . .

将所有 int 更改为 int64_t 并不能解决问题,但奇怪的是,此处出现了 -2 的相同输出。

Enter a number: 1231212123133333333333321
The dubble of that number is : -2
Press any key to continue . . .

我不明白为什么在发生整数溢出时会出现所有数字 -2。我认为数字应该绕一圈。

最佳答案

您给出的值 1231212123133333333333321 远远大于 uint64_t 可以容纳的值(溢出)。在我的例子中,uint64_t(占用 8 字节数据)数据类型的最大范围是:

0 to +18446744073709551615

要了解您平台的限制,即实际上,请借助 C++ 库 limits:

#include <limits>
std::cout << std::numeric_limits<uint64_t>::max() << std::endl;

请注意,它可能因不同的计算机架构而异。

关于c++ - 整数不会超过随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62908579/

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