怎么能写得更好?

时间:2011-12-30 00:50:53

标签: c# math casting

private int OffsetToBlockNumber(int offset) {
            return (int)(Math.Floor((double)(offset / 0x1000)) - (double)0xc);
}

我正在创建一个类来读取一种文件类型,该文件被分为大小为4096字节的块或十六进制的0x1000。第一个块是0xC000,所以这就是我从结果中减去0xC的原因..

无论如何,问题是当我尝试时:

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

它说十进制和双精度类型之间的调用是模糊的,所以我将它们转换为双精度数,然后将结果转换为int。这样做似乎相当愚蠢,所以我希望有人可以更好地解决这个问题。

1 个答案:

答案 0 :(得分:3)

右移12与除0x1000相同。您的原始表达式可表示为:

return (offset >> 12) - 0xc;

虽然我想知道你是否真的打算在分割/转移之前减去0xc

相关问题