【发布时间】:2010-11-23 06:17:27
【问题描述】:
如何表示超过任何特定数据类型(int、long)的最大值的值?
我正在考虑使用另一个存储空间来充当柜台。一旦超过最大值,计数器就会更新为 ,变量已超过“x”次限制。还有其他有效的方法吗?
我们如何显示确切的值?
P.S : 只是一个假设性问题。
【问题讨论】:
标签: programming-languages int long-integer maximize
如何表示超过任何特定数据类型(int、long)的最大值的值?
我正在考虑使用另一个存储空间来充当柜台。一旦超过最大值,计数器就会更新为 ,变量已超过“x”次限制。还有其他有效的方法吗?
我们如何显示确切的值?
P.S : 只是一个假设性问题。
【问题讨论】:
标签: programming-languages int long-integer maximize
一种方法是为此实际制定出其中一个值。
例如,如果您有一个可以表示 0 到 65535(含)值的 16 位整数类型,请将范围缩小到 0 到 65534,并使用 65535 来表示值“too darned big”。
您必须小心控制操作,以免它们在正常的事件过程中产生该值,但如果您的语言提供类功能,那将相当容易。
或者,您可以使用下一个最大的数据类型,例如long 用于int 或long long 用于long,并使用额外的范围来存储信息。
而且,如果您需要更多,您可以编写一个 bignum 库(或使用已经存在的库),这样就不会对您的数字进行人为限制。
【讨论】:
我不确定,但我认为您必须创建自己的数据类型(或类)。以前已经这样做过。事实上,一些语言有自己的实现:
http://groups.csail.mit.edu/mac/users/adams/BigInt/BigInt.html
【讨论】:
考虑一个标准的 IEEE-754 浮点数和“Infinity”位模式。可以在固定的 int/long 中保留类似的位模式来表示“无穷大”。但是,CPU 不会像大多数 FPU 那样帮助您处理数学/溢出状态。
像 Ruby 或 elisp 等一些语言已经在整数中“保留”位(例如,Ruby 中的 fixnum 仅限于 [-2^29,2^29-1],因为 2 位用于对象管理)。使用特定的位模式与位只会删除一个潜在值。
如果您谈论的是高级语言,例如 C#,那么定义自定义类型很容易:
struct IntWithStuff {
int value;
bool isTooBig;
}
您还可以重载各种运算符并实现一些(显式)强制转换,但我离题了...
【讨论】: