问候,
我无法相信我会问这样一个基本问题,但它没有意义,所以这里是:)。
在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
那是什么给了什么?
提前致谢!
猪
答案 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;