给出以下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;
}
对此问题进行谷歌搜索会得出关于不同按位运算的各种答案,但我找不到针对带有负号的这种特定否定的答案。
答案 0 :(得分:0)
第二个。 C ++会将任何非零值都视为true,因此!检查一个整数实际上等于!(value!= 0)或(value == 0)
答案 1 :(得分:0)
在C或C ++中将运算符!
“逻辑非”应用于数值时,将产生如下结果:
1
,如果其操作数为零0
否则 C的条件语句if
将0
解释为“ false”,并将任何非零值(包括1
)解释为“ true”。因此,您的第二个选择是正确的。