C#-常量值';4294901760';无法转换为';int';
您好 我不敢相信我会问这样一个基本的问题,但它没有意义,所以它在这里:) 在Windows Phone 7/.net上的C#中,我试图在类中定义一个常量,如下所示:C#-常量值';4294901760';无法转换为';int';,c#,windows-phone-7,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; 如果像这样对
// 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位的,因此它的范围是-2147483648到2147483647,请参阅
那么是什么原因呢
提前谢谢
正如您所注意到的,
Int32
的范围是-2147483648到2147483647,因此可以保留该范围内的任何数字,但只能保留该范围内的数字。4294901760大于2147483647,因此不适合Int32
对此该怎么做取决于你想要实现什么。如果您只需要一个位模式为ffffff0000
的Int32
,则按照建议使用未选中的:
int y = unchecked((int)0xffff0000);
y
现在的值为-65536,即解释为有符号整数的位模式
然而!如果您确实需要值4294901760,则应使用适合它的数据类型-因此UInt32
int
是一个介于-2147483648到2147483647之间的有符号整数。
您需要的是一个无符号整数,即uint
,就像第一条错误消息告诉您的那样。尝试按照编译器消息的建议使用unchecked:
public const int RED = unchecked((int)0xffff0000);
这将RED
定义为-65536,即0xffff0000,被解释为带符号整数。这将帮助您绕过未选中的:
public const uint RED = 0xffff0000;
public const int RED = 0xffff << 16;
public const int RED=0xffff当然可以。一定是迟到了!所以如果使用unchecked,c#会截断值还是将其环绕,从而保留数据?。因此:在未检查的上下文中,如果表达式生成的值超出了目标类型的范围,则结果将被截断。@Vik该页面有点误导(最新版本更好)-因为这里的数据类型大小相同,所以它不是真正的“截断”您是对的AakashM,值将重新开始:从最小值+溢出大小。谢谢AakashM!混乱源于c#处理int32和uint32的方式。。。那就清楚了!