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

私は4096バイト、または16進数で0x1000サイズのブロックに分割されたタイプのファイルを読み込むクラスを作っています。これはどのようにしてより良い書き方ができますか?

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

をそれは、コールは、小数点の間で曖昧である:最初のブロックは、私はとにかく..結果から

をから0xCを引いてる理由ですので、問題は、私が試したときということです、0xC000でありますダブルタイプに変換するので、それらをdouble型にキャストし、int型に変換します。このようにするのはかなりばかげているようです。誰かがより良い方法で光を当てることができるようになることを願っていました。

+0

整数除算を使用すると、 'offset/0x1000'は既にFloor()とdoubleを混乱させることなく切り捨てられます。 –

答えて

3

シフト右12は、0x1000で除算するのと同じです。あなたが実際にシフト/除前0xcを減算することを意図している場合、私は疑問に思うが

return (offset >> 12) - 0xc; 

:あなたの元の式は次のように表すことができますか?

+1

プロセッサと高速整数計算の仕組みを覚えておいてください。現代世界の誰かを見て、実際にはまだどのようにプログラムするかを知っているニース。 – TomTom

関連する問題