如何表示超过任何特定数据类型(int,long)的最大值的值?
我正在考虑让另一个存储空间像计数器一样。一旦超过最大值,计数器就会更新,即变量已超过“x”次的限制。还有其他一些有效的方法吗?
我们如何显示确切的值?
P.S:只是一个假设的问题。
答案 0 :(得分:2)
一种方法是为此目的实际创造出一个值。
例如,如果您有一个16位整数类型,可以表示0到65535之间的值,则将范围减小到0到65534,并使用65535表示“太大了”的值。
您必须小心控制操作,以便它们不会在正常的事件过程中产生该值,但如果您的语言提供类功能,则相当容易。
或者,您可以使用下一个最大的数据类型,例如long
int
或long 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;
}
您还可以重载各种运算符并实现一些(显式)强制转换,但我离题了......