如何表示超过任何特定数据类型(int、long)的最大值的值?
我正在考虑有一个像柜台一样的存储空间。一旦超过最大值,计数器就会更新为 ,变量已超过“x”次限制。还有其他有效的方法吗?
我们如何显示确切的值?
PS:只是一个假设的问题。
如何表示超过任何特定数据类型(int、long)的最大值的值?
我正在考虑有一个像柜台一样的存储空间。一旦超过最大值,计数器就会更新为 ,变量已超过“x”次限制。还有其他有效的方法吗?
我们如何显示确切的值?
PS:只是一个假设的问题。
一种方法是为此目的实际雕刻出其中一个值。
例如,如果您有一个 16 位整数类型可以表示从 0 到 65535(含)的值,则将范围缩小到 0 到 65534 并使用 65535 表示值“too darned big”。
您必须小心控制操作,以免它们在正常的事件过程中产生该值,但如果您的语言提供类功能,那将相当容易。
或者,您可以使用下一个最大的数据类型,例如long
forint
或long long
forlong
并使用额外的范围来存储信息。
而且,如果您需要更多,您可以编写一个 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;
}
您还可以重载各种运算符并实现一些(显式)强制转换,但我离题了......