2011-12-30 78 views
0
private int OffsetToBlockNumber(int offset) { 
      return (int)(Math.Floor((double)(offset/0x1000)) - (double)0xc); 
} 

我正在創建一個類來讀取一個文件類型,該文件被分成大小爲4096個字節或十六進制爲0x1000的塊。第一塊是0xC000時,所以這就是爲什麼我從結果中減去0xC的..這怎麼寫得更好?

無論如何,問題是,當我嘗試:

Math.Floor(offset/0x1000) - 0xC 

它說的調用是小數之間的曖昧和double類型,所以我將它們投入雙打,然後將結果轉換爲int。這樣做似乎很愚蠢,所以我希望有人能以更好的方式說明問題。

+0

使用整數除法,'offset/0x1000'已經截斷而不必混亂Floor()和double。 – 2011-12-30 01:17:33

回答

3

右移12與0x1000相除。您的原始表達式可以表示爲:

return (offset >> 12) - 0xc; 

雖然我不知道你實際上意味着將之前減去0xc /移?

+1

祝賀您記住處理器和快速整數運算的工作方式;)+1。很高興看到現代世界的某個人實際上仍然知道如何編程。 – TomTom 2011-12-30 01:15:58