0

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

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

我们如何显示确切的值?

PS:只是一个假设的问题。

4

3 回答 3

2

一种方法是为此目的实际雕刻出其中一个值。

例如,如果您有一个 16 位整数类型可以表示从 0 到 65535(含)的值,则将范围缩小到 0 到 65534 并使用 65535 表示值“too darned big”。

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

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

而且,如果您需要更多,您可以编写一个 bignum 库(或使用已经存在的库),这样就不会对您的数字施加人为限制。

于 2010-11-23T06:21:10.190 回答
1

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

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

于 2010-11-23T06:21:17.497 回答
1

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

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

如果您谈论的是高级语言,例如 C#,那么定义自定义类型很容易:

struct IntWithStuff {
   int value;
   bool isTooBig;
}

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

于 2010-11-23T06:31:35.303 回答