C# - 常量值'4294901760'无法转换为'int'

时间:2011-05-17 07:24:51

标签: c# windows-phone-7

问候,

我无法相信我会问这样一个基本问题,但它没有意义,所以这里是:)。

在Windows Phone 7 / .net上的C#中,我试图在类中定义一个常量,如下所示:

// 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=vs.80).aspx

那是什么给了什么?

提前致谢!

5 个答案:

答案 0 :(得分:17)

如您所知,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,即该位模式被解释为有符号整数。

然而!如果你真的想要值4,294,901,760,你应该使用适合它的数据类型 - 所以UInt32

答案 1 :(得分:4)

int是一个有符号整数,范围从-2,147,483,648到2,147,483,647。
你想要的是一个无符号整数,即uint,就像第一条错误信息告诉你的那样。

答案 2 :(得分:2)

按照编译器消息的建议尝试使用unchecked:

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

这将RED定义为-65536,将0xffff0000解释为signed int。

答案 3 :(得分:2)

public const uint RED = 0xffff0000;

答案 4 :(得分:1)

这应该让你无法控制:

public const int RED = 0xffff << 16;