2010-11-23 25 views
0

如何表示超出任何特定數據類型(int,long)的最大值的值?如何表示大於最大值的數字

我在考慮讓另一個存儲空間像計數器一樣工作。一旦超過最大值,計數器更新說,變量已經超過了「x」次數的限制。還有其他一些有效的方法嗎?

我們如何顯示確切的值?

P.S:只是一個假設的問題。

回答

2

一種方法是實際爲此目的劃出一個值。

例如,如果您有一個16位整數類型可以表示0到65535之間的值,請將範圍縮小到0到65534,並使用65535來表示值「too darned big」。

您必須小心控制操作,以便它們不會在正常事件過程中產生該值,但如果您的語言提供了班級功能,則這樣做相當容易。

或者,您可以使用下一個最大的數據類型,例如用於longintlong longlong使用額外的範圍來存儲信息。

而且,如果您需要的不止於此,您可以編寫一個bignum庫(或使用一個已存在的庫),以便對您的編號沒有任何人爲限制。

1

考慮一個標準的IEEE-754浮點數和「無限」的位模式。人們可以在固定的int/long內保留一個類似的位模式來表示「Infinity」。但是,像大多數FPU一樣,CPU不會幫助你處理數學/溢出狀態。

一些像Ruby或elisp這樣的語言已經在整數中保留位了(例如Ruby中的fixnum被限制爲[-2^29,2^29-1],因爲2位用於對象管家)。使用特定的比特模式與比特只會刪除一個潛在值。

如果你談論的是更高層次的語言,比方說,C#,那麼它很容易定義自定義類型:

struct IntWithStuff { 
    int value; 
    bool isTooBig; 
} 

你也可以重載各個運營商和實施一些(明確的)管型,但我離題...