首页 > 解决方案 > C#按位否定!检查等价物

问题描述

给定以下 C++ 代码:

void Check(DWORD64 ptr)
{
    if ( ! (ptr & 0x8000000000000000) )
        return;
}

在 C# 中,这会导致以下错误:

CS0023 运算符“!” 不能应用于“ulong”类型的操作数

如何按位检查 C# 中的 ptr 参数?

比较不为0?

void Check(ulong ptr)
{
    if ((ptr & 0x8000000000000000) != 0)
        return;
}

或检查0?

void Check(ulong ptr)
{
    if ((ptr & 0x8000000000000000) == 0)
    return;
}

谷歌搜索这个问题会导致各种不同的按位运算的答案,但我找不到这个带有感叹号的特定否定的答案。

标签: c#

解决方案


当运算符!“逻辑非”应用于 C 或 C++ 中的数值时,它会产生如下结果:

  • 1如果它的操作数为零
  • 0否则

C 的条件语句if解释0为“假”,任何非零值,包括1,都解释为“真”。因此,您的第二个选项是正确的。


推荐阅读