代码之家  ›  专栏  ›  技术社区  ›  Anders

你如何用C_返回“not uint”?

  •  2
  • Anders  · 技术社区  · 15 年前

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

    Return (Not (crc32Result))
    

    我正试图把它转换成C,这就是我所拥有的:

    return (!(crc32Result));
    

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

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

    我需要用不同的接线员来代替这个吗?

    谢谢!

    3 回复  |  直到 15 年前
        1
  •  15
  •   Community CDub    8 年前

    看起来您要做的是反转CRC32结果的位。如果是这样,您需要tilde操作符~。

    return (~crc32Result);
    

    参考文献 this question.

        2
  •  3
  •   Drew McGhie    15 年前

    在C中,砰的一声(!)用于翻转布尔变量。您是要将上面的uint视为布尔值,还是执行其他反转操作(可能是所有二进制数字的反转)?

    我建议您选择其中一种解决方案:

    return (!(bool)crc32Result);  // treating as bool (0 = false, anything else is true)
    
    return (~crc32Result); //bitwise flipping for all
    
        3
  •  3
  •   Kevin Anderson    15 年前

    试试这个:

    return crc32Result == 0;
    

    或者更清楚地了解我在做什么:

    return !(crc32Result != 0);
    

    第二个例子是通过“0为假,非零为真”的原则将其转换为布尔值。所以如果它不等于零,它将返回真。然后我用“!”操作员执行“不”操作。您给出的Visual Basic代码显然隐含了第一部分(如C/C++),但C和Java不会。

    但这是当且仅当您正在从函数中查找布尔返回类型时。如果你做了一点明智的倒置,那么你需要以下几点:

    return (~crc32Result);
    

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