2013-03-17 118 views
1

将-1转换为uint将不起作用“((uint)( - 1))”解决方案?将-1转换为uint C#

num10 = ((uint)(-1)) >> (0x20 - num9); 

错误: 恒值“-1”不能被转换为“UINT”(利用未选中语法重写)

+2

-1是无符号整数的范围之外。 – 2013-03-17 06:03:49

+1

错误消息是否不告诉您解决方案? – 2013-03-17 06:06:51

回答

1

的无符号整数只能表示正值。它不能代表-1。

如果要表示负值,则需要使用signed类型,如int

2

编译器告诉你,你需要做什么:

unchecked 
{ 
    num10 = ((uint)(-1)) >> (0x20 - num9); 
} 

但是,它可能不会给你你想要的结果。

4

使用

uint minus1 = unchecked((uint)-1); 
uint num10 = (minus1) >> (0x20 - num9); 

甚至更​​好

uint num10 = (uint.MaxValue) >> (0x20u - num9); 
0

你确实可以有些东西类似于负数,无符号数。它们具有如下特征:x + (-x) == 0

要建立在C#中没有选中区域“负” UINT,您可以改用等效(~x) + 1这是一样的-x