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, так как первое сообщение об ошибке говорит вам.


public const uint RED = 0xffff0000;

попробуйте использовать unchecked как предложено сообщением компилятора:

public const int RED = unchecked((int)0xffff0000);

Это определяет RED as -65536, который 0xffff0000 интерпретируется как подписанный int.


Это должно заставить вас обойти непроверенный:

public const int RED = 0xffff << 16;