将-1转换为uint将不起作用“((uint)( - 1))”解决方案?
num10 = ((uint)(-1)) >> (0x20 - num9);
错误: 常量值'-1'无法转换为'uint'(使用'unchecked'语法覆盖)
答案 0 :(得分:7)
使用
uint minus1 = unchecked((uint)-1);
uint num10 = (minus1) >> (0x20 - num9);
甚至更好
uint num10 = (uint.MaxValue) >> (0x20u - num9);
答案 1 :(得分:2)
编译器告诉你需要做什么:
unchecked
{
num10 = ((uint)(-1)) >> (0x20 - num9);
}
但是,它可能无法提供您想要的结果。
答案 2 :(得分:1)
无符号整数只能表示正值。它不能代表-1。
如果您想表示负值,则需要使用int
类型,例如{{1}}。
答案 3 :(得分:1)
查找unchecked上下文。
答案 4 :(得分:0)
你确实可以在某种程度上拥有类似于负数,无符号数的东西。它们具有x + (-x) == 0
要在没有未经检查的区域的c#中创建“否定”uint,您可以使用与(~x) + 1
相同的等效-x