如何表示大于最大值的数字

时间:2010-11-23 06:17:27

标签: programming-languages int long-integer maximize

如何表示超过任何特定数据类型(int,long)的最大值的值?

我正在考虑让另一个存储空间像计数器一样。一旦超过最大值,计数器就会更新,即变量已超过“x”次的限制。还有其他一些有效的方法吗?

我们如何显示确切的值?

P.S:只是一个假设的问题。

3 个答案:

答案 0 :(得分:2)

一种方法是为此目的实际创造出一个值。

例如,如果您有一个16位整数类型,可以表示0到65535之间的值,则将范围减小到0到65534,并使用65535表示“太大了”的值。

您必须小心控制操作,以便它们不会在正常的事件过程中产生该值,但如果您的语言提供类功能,则相当容易。

或者,您可以使用下一个最大的数据类型,例如long intlong long long,并使用额外范围存储信息。

而且,如果你需要更多,你可以编写一个bignum库(或使用一个已经存在的库),这样你的数字就没有人为限制了。

答案 1 :(得分:1)

我不确定,但我认为你必须创建自己的数据类型(或类)。这是以前做过的。事实上,有些语言有自己的实现:

http://groups.csail.mit.edu/mac/users/adams/BigInt/BigInt.html

答案 2 :(得分:1)

考虑标准IEEE-754浮点和“无限”位模式。可以在固定的int / long内保留类似的位模式来表示“Infinity”。但是,CPU不会像大多数FPU那样帮助你解决数学/溢出状态。

某些语言(如Ruby或elisp)已经在整数中“保留”位(例如,Ruby中的fixnum限于[-2 ^ 29,2 ^ 29-1],因为2位用于对象管理)。使用特定的位模式与位只会删除一个潜在的值。

如果您正在谈论更高级别的语言,比如C#,那么定义自定义类型很容易:

struct IntWithStuff {
   int value;
   bool isTooBig;
}

您还可以重载各种运算符并实现一些(显式)强制转换,但我离题了......