2

我有一些用VB编写的代码,内容如下:

Return (Not (crc32Result))

我正在尝试将其转换为 C#,这就是我所拥有的:

return (!(crc32Result));

但是我得到一个编译器错误:

编译器错误消息: CS0023:运算符“!” 不能应用于“uint”类型的操作数

我需要使用其他运算符来代替这个运算符吗?

谢谢!

4

3 回答 3

15

看起来您正在尝试做的是反转 crc32result 的位。如果是这样,您需要波浪号运算符 ~。

return (~crc32Result);

参考这个问题。

于 2009-07-24T19:11:49.270 回答
3

在 C# 中,bang(!) 用于翻转布尔变量。您是否尝试将上面的 uInt 视为布尔值,或者执行其他一些反转(可能是所有二进制数字的反转)?

我建议其中之一是您正在寻找的解决方案:

return (!(bool)crc32Result);  // treating as bool (0 = false, anything else is true)

return (~crc32Result); //bitwise flipping for all
于 2009-07-24T19:13:58.640 回答
3

试试这个:

return crc32Result == 0;

或者更清楚我在做什么:

return !(crc32Result != 0);

第二个示例所做的是通过“0 为假,非零为真”的原则将其转换为布尔值。因此,如果它不等于 0,它将返回 true。然后我使用“!” 运算符来做“不”操作。您提供的 Visual Basic 代码显然隐含地执行了第一部分(C/C++ 也是如此),但 C# 和 Java 不会。

但这是当且仅当您正在从函数中寻找布尔返回类型时。如果您正在执行按位反转,那么您需要以下内容:

return (~crc32Result);

在这种情况下,“~”运算符会转换为其他位模式。

于 2009-07-24T19:15:09.403 回答