7

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

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

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

4

5 回答 5

11

利用

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

甚至更好

uint num10 = (uint.MaxValue) >> (0x20u - num9);
于 2013-03-17T06:04:05.060 回答
2

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

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

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

于 2013-03-17T06:03:55.933 回答
1

你确实可以有一些类似于负数、无符号数的东西。他们有这样的特点x + (-x) == 0

要在没有未经检查的区域的 c# 中创建“负”uint,您可以改用(~x) + 1-x

于 2014-07-31T14:16:28.493 回答
1

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

如果要表示负值,则需要使用有符号类型,例如int.

于 2013-03-17T06:03:25.797 回答
1

查找未检查的上下文。

于 2013-03-17T06:04:18.483 回答