2009-01-11 18 views
0

以何種方式(S)將是一個表達式溢出需要在以下情況:C#表達式溢出好嗎?

  1. 計算哈希值
  2. 計算校驗和

+0

你能稍微詳細一點嗎?我認爲我不認爲這個問題... – rkj 2009-01-11 16:02:01

回答

4

只要你期望操作可能會溢出,並且你想要做的事情的定義允許溢出(或可能需要它),它會使生活變得更容易。

例如,一個算法計算哈希值是:

  • 開始與一個素數
  • 對於您的對象的每個字段,由另一個質數相乘當前結果,並添加哈希領域

例如:

int ret = 37; 
ret = ret * 37 + field1.GetHashCode() * 23; 
ret = ret * 37 + field2.GetHashCode() * 23; 
ret = ret * 37 + field3.GetHashCode() * 23; 
return ret; 

在這裏,任何的計算可能會溢出,但沒關係 - 我們對數量的大小沒有真正的興趣,只是它對不同對象可能會有所不同的目標,但對於相同的目標而言,它們是相同的。

試圖做到這一點沒有溢出是一種痛苦 - 你可以使用XOR,但是這有其他缺點。