Я пытаюсь сконструировать большой Int64 с полубайтовой информацией, хранящейся в байтах.
Следующие строки кода работают как положено:
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). </p>