У меня есть приложение, которое требует от меня некоторой битовой маскировки. Маскирование проверяет строку, и в зависимости от того, какие биты в этой строке являются высокими (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 из его выражения. Это неправильно? - person Lasse V. Karlsen   schedule 28.07.2014