Я пытаюсь построить большой Int64 с информацией полубайта, хранящейся в байтах.Почему это конкретное переполнение операции (см. CS0220) в C#?
следующие строки кода работы, как и ожидалось:
Console.WriteLine("{0:X12}", (Int64)(0x0d * 0x100000000));
Console.WriteLine("{0:X12}", (Int64)(0x0d * 0x1000000));
Console.WriteLine("{0:X12}", (Int64)(0x0d * 0x100000));
Почему следующая строка приведет к ошибке компиляции CS0220 «Операция перетекает во время компиляции в проверяемой режиме», а другие нет?
Console.WriteLine("{0:X12}", (Int64)(0x0d * 0x10000000));
Результат будет выглядеть так:
FFFFFFFFD0000000
вместо:
0000D0000000
Может кто-нибудь объяснить это? Теперь я конвертирую с операторами сдвига, но все же любопытно, почему этот подход не работает!
Обновление: ошибка также возникает при использовании (Int64) (0x0d < < 28).
Вы были быстрее! Закончил тот же ответ, когда появился ответ. +1. Полностью согласен с ответом :) –
Хех. это происходит все время, для меня тоже. :) В любом случае, спасибо. – Noldorin