Переполнение при ошибке вычисления постоянного значения в C # - PullRequest
3 голосов
/ 18 февраля 2012

Мне нужно присвоить постоянное значение в целых числах (или другом типе данных).

Я получил ошибку «Не удалось преобразовать ...» с присваиванием.

enter image description here

Приведение не работает с ошибкой "Overflow ...".

enter image description here

Что с этим не так?

Ответы [ 2 ]

4 голосов
/ 18 февраля 2012

Вы определили слишком много F с в константе.Используя 0xFFFFFFFF, компилятор должен выбрать место хранения, которое поддерживает положительное значение 0xFFFFFFFF.Максимальное положительное значение Int32 вместо 0x7FFFFFFF, и, следовательно, компилятор правильно выдает ошибки.Единственными типами, которые могут содержать 0xFFFFFFFF, являются uint или одно из 64-битных хранилищ.

Для исправления просто используйте Int32.MaxValue

int i32 = Int32.MaxValue;
1 голос
/ 18 февраля 2012

Максимальное число, которое может представлять 32-битное int, равно 0x7fffffff.7 в начале встречается, а не другой f, потому что int это подписано , поэтому старший бит представляет знак (положительный или отрицательный) числа.

В вашем первом примере компилятор видит число, которое может быть представлено только беззнаковым целым, поэтому он предполагает, что это UInt32.Это не может быть преобразовано в int, следовательно, ошибка.

Я ваш второй пример, когда вы принудительно преобразуете приведение, но число не будет вписываться в int, поэтому переполнениебольшой) происходит.

...