2011-12-30 76 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