用户可以输入最大int长度吗?

时间:2016-03-13 18:55:58

标签: c++ maxlength

我做了一个小程序来确定用户提供的整数的长度:

#include <iostream>

using namespace std;

int main()
{
    int c=0; //counter for loop
    int q=1; //quotient of number upon division

    cout << "Hello Cerberus! Please enter a number." << endl;
    cin >> q;

    if(q > -10 && q < 10)
    {
        cout << "The number you entered is 1 digit long." << endl;
    }
    else
    {
        while(q != 0)
        {
            q=q/10;
            c++;
        }

        cout << "The number you entered is " << c << " digits long." << endl;
    }
    return 0;
}

除非数字太大,否则效果很好。一旦输入长度为13位左右,程序默认为&#34;您输入的数字长度为1位数&#34; (除非数字在-10到10之间,否则它不应该提供该解决方案。)

是否存在用户输入整数的长度限制,或者是否证明了我的计算机的内存限制?

1 个答案:

答案 0 :(得分:2)

这是您计算机架构的一个限制。每种数字类型都有一个固定的上限,因为该类型描述了具有固定大小的数据。例如,您的int可能会占用内存中的四个或八个字节(取决于CPU;根据您的观察结果,我说前者),并且只有很多位组合它可以存储在很多字节的内存中。

您可以使用std::numeric_limits确定平台上int的范围,但我个人建议坚持使用固定宽度类型的别名(例如int32_tint64_t)并选择适合您申请的范围。

或者,确实存在所谓的&#34; bigint&#34;这些库本质上是包装整数数组的类,并添加了聪明的功能,使任意大的值像算术类型一样工作。虽然这对你来说可能有点过头了。

不要试图开始使用浮点类型(floatdouble)来提升魔法范围的能力;就像积分类型一样,它们的精度基本上是有限的,但使用浮点类型会在顶部增加额外的问题和关注点。

但用户输入没有根本限制。这是因为您的流正在转换文本字符,并且您的流基本上可以包含尽可能多的文本字符。在那个级别,你实际上只受可用内存的限制。