C# - постоянное значение '4294901760' не может быть преобразовано в 'int'
С ПРИВЕТОМ,
Я не могу поверить, что задаю такой основной вопрос, но это не имеет смысла, поэтому вот он :).
В C# на Windows Phone 7 / .net я пытаюсь определить константу в классе следующим образом:
// error CS0266: Cannot implicitly convert type 'uint' to 'int'.
// An explicit conversion exists (are you missing a cast?)
public const int RED = 0xffff0000;
Если я положил (int) вокруг него так, я получаю еще одну ошибку:
// error CS0221: Constant value '4294901760' cannot be converted to a 'int'
// (use 'unchecked' syntax to override)
public const int RED = (int)0xffff0000;
но я знаю, что мой int 32-бит, следовательно, имеет диапазон от -2,147,483,648 до 2,147,483,647, см. http://msdn.microsoft.com/en-us/library/5kzh1b5w (v=против 80).aspx
Так что это дает?
спасибо заранее!
свинья
5 ответов
как вы заметили, диапазон Int32
от -2,147,483,648 до 2,147,483,647, поэтому любое число в этом диапазоне может быть удержано, но только числа в этом диапазоне могут быть удержаны. 4,294,901,760 больше, чем 2,147,483,647, поэтому не вписывается в Int32
.
что с этим делать, зависит от того, чего вы хотите достичь. Если вы просто хотите Int32
С битовым шаблоном ffff0000
, тогда как рекомендации по применению unchecked
:
int y = unchecked((int)0xffff0000);
y
теперь имеет значение -65536, что немного шаблон интерпретируется как целое число со знаком.
int
- целое число со знаком от -2,147,483,648 до 2,147,483,647.
Вы хотите целое число без знака, т. е. uint
, так как первое сообщение об ошибке говорит вам.
попробуйте использовать unchecked как предложено сообщением компилятора:
public const int RED = unchecked((int)0xffff0000);
Это определяет RED
as -65536, который 0xffff0000 интерпретируется как подписанный int.