Почему это конкретное переполнение операции (см. CS0220) в C#?C#

Место общения программистов C#
Ответить
Anonymous
 Почему это конкретное переполнение операции (см. CS0220) в C#?

Сообщение Anonymous »

Я пытаюсь создать большой 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

Подробнее здесь: https://stackoverflow.com/questions/713 ... s0220-in-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»