将-1转换为无符号整数(uint) C#

7
将-1转换为uint将不起作用 "((uint)(-1))" 解决方案?
num10 = ((uint)(-1)) >> (0x20 - num9);

错误: 常量值“-1”无法转换为“uint”(使用“unchecked”语法来覆盖)

2
-1 超出了无符号整数的范围。 - Austin Brunkhorst
1
错误信息没有告诉你解决方案吗? - ta.speot.is
5个回答

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

甚至更好

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

2
编译器告诉你需要做什么:
unchecked
{
     num10 = ((uint)(-1)) >> (0x20 - num9);
}

然而,它可能无法给您想要的结果。

1

无符号整数只能表示正值,不能表示-1。

如果您想表示负值,您需要使用有符号类型,如int


1

1
您确实可以拥有类似于负数的无符号数字。它们具有这样的特征:x + (-x) == 0 如果不使用未经检查的区域,在C#中创建“负”uint,您可以使用等效的(~x)+1,它与-x相同。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接