Как это можно написать лучше? - PullRequest
0 голосов
/ 30 декабря 2011
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 Ответ

3 голосов
/ 30 декабря 2011

Сдвиг вправо 12 - это то же самое, что деление на 0x1000.Ваше оригинальное выражение может быть выражено как:

return (offset >> 12) - 0xc;

Хотя мне интересно, действительно ли вы хотели вычесть 0xc перед делением / сдвигом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...