将-1转换为uint将不起作用“((uint)(-1))”解决方案?
num10 = ((uint)(-1)) >> (0x20 - num9);
错误:常量值“-1”无法转换为“uint”(使用“未检查”语法覆盖)
将-1转换为uint将不起作用“((uint)(-1))”解决方案?
num10 = ((uint)(-1)) >> (0x20 - num9);
错误:常量值“-1”无法转换为“uint”(使用“未检查”语法覆盖)
利用
uint minus1 = unchecked((uint)-1);
uint num10 = (minus1) >> (0x20 - num9);
甚至更好
uint num10 = (uint.MaxValue) >> (0x20u - num9);
编译器告诉你你需要做什么:
unchecked
{
num10 = ((uint)(-1)) >> (0x20 - num9);
}
但是,它可能不会给您想要的结果。
你确实可以有一些类似于负数、无符号数的东西。他们有这样的特点x + (-x) == 0
要在没有未经检查的区域的 c# 中创建“负”uint,您可以改用(~x) + 1
与-x
无符号整数只能表示正值。它不能代表-1。
如果要表示负值,则需要使用有符号类型,例如int
.
查找未检查的上下文。