【发布时间】:2014-07-28 20:12:37
【问题描述】:
我有一个应用程序需要我进行一些位屏蔽。掩码将检查一个字符串,并根据该字符串中的哪些位是高(1)或低(0)输入不同的方法。
如果它们是低 (0) 位是无能为力的,我们假设如果它们是高 (1) 则一切正常。
254 = 11111110 二进制。这是我想用来检查最后一位的掩码,
void Main()
{
ushort[] data = new ushort[]{254};
int alertPosition = 251;
int tempCriticalPosition = 247;
int fan1FailurePosition = 253;
** int fan2FailurePosition = 254;
int alarmCritialBit = (tempCriticalPosition & data[0]) == 0 ? 0 : 1;
int fan1LedFlag = (fan1FailurePosition & data[0]) == 0 ? 0 : 1;
**int fan2CameraFlag = (fan2FailurePosition & data[0]) == 0 ? 0 : 1;
int alertFlag = (alertPosition & data[0]) == 0 ? 0 : 1;
System.Console.WriteLine(alarmCritialBit);
System.Console.WriteLine(fan1LedFlag);
System.Console.WriteLine(fan2CameraFlag);
System.Console.WriteLine(alertFlag);
}
在本例中,这是一个 fan2Failure。 所以我的数组中的数据和我的位掩码是相同的,但我得到的结果是 1。我做其他检查得到的结果也是 1,所以我现在对它是如何工作的感到困惑。
我在网上查找的所有内容都推荐了类似的方法,我认为要检查我的数据是否存在 fan2failure,我在掩码中提供了 fan2failure 的字符串,如果数据和我的掩码相同,它将返回 0 ?
我知道这很简单,但我上网查了一下,看不出我做错了什么。
谢谢
【问题讨论】:
-
为什么
fan2CameraFlag不应该是 1?254 & 254 == 254,因此你从它的表达式中得到 1。这是错的吗? -
为了所有有洞的事物的爱。请使用枚举!为了理智。为了类型安全!为了可读性。拜托拜托。