gpt4 book ai didi

c# - 常数值 '-1' 无法转换为 'uint' ,当尝试 `uint mask = ~0;`

转载 作者:行者123 更新时间:2023-11-30 14:05:38 29 4
gpt4 key购买 nike

要演示的示例代码:

public int FindComplement(int num) {
//uint mask = ~0; //<-- error CS0031
//uint mask = (uint)~0; //<-- error

uint i = 0;
uint mask = ~i; //<-- it works

while((mask&num) != 0) mask <<= 1;

return (int)~mask^num;
}

当我尝试 uint mask = ~0 时,它会导致如下错误

error CS0031: Constant value '-1' cannot be converted to a 'uint'

然后我尝试使用 uint i = 0; 这样的代码uint mask = ~i,有效。

我的问题是为什么 uint mask = ~0 会导致编译错误,有没有其他方法可以让它工作?

提前致谢

最佳答案

0 的类型是int~0的类型仍然是int,常量值为-1。这超出了 uint 的范围,因此没有任何从 ~0uint 的隐式转换。 (当常量在 uint 的有效值范围内时,只有 int 类型常量到 uint 的隐式转换。)

最简单的解决方法是使用 uint 类型的文字:

uint mask = ~0U;

可以转换为结合unchecked:

uint mask = unchecked((uint)~0);

...但这很丑陋。

关于c# - 常数值 '-1' 无法转换为 'uint' ,当尝试 `uint mask = ~0;`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55493279/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com