C#按位取反!支票等值

时间:2019-01-16 19:38:08

标签: 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;
}

对此问题进行谷歌搜索会得出关于不同按位运算的各种答案,但我找不到针对带有负号的这种特定否定的答案。

2 个答案:

答案 0 :(得分:0)

第二个。 C ++会将任何非零值都视为true,因此!检查一个整数实际上等于!(value!= 0)或(value == 0)

答案 1 :(得分:0)

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

  • 1,如果其操作数为零
  • 0否则

C的条件语句if0解释为“ false”,并将任何非零值(包括1)解释为“ true”。因此,您的第二个选择是正确的。