Что делает программа?
Вот есть такой код
#define MASK 0x15
int main() {
char A[5] = {'a', 'B', 'c', 'D', 'e'};
int I, RES = 0;
for (I = 0; I < 5; I++)
if ((A[I] & MASK) == MASK)
RES++;
printf("\n The result is : %d ", RES);
}
Нужно обьяснить, что он делает. Я насколько понял у нас есть масив из char, програма бежит по масиву и если биты этого чара содержаться в MASK то RES увеличиваем на 1.
Но у меня printf() показывает всегда 0. Я так понимаю, что либо есть ошибка в коде либо программа делает не то, что я думаю
Ответы (2 шт):
В вашем коде, описание функции printf, содержится в заголовочном файле stdio.h, так как ввод-вывод не является встроенной возможностью C, то для использования printf вы обязаны подключить файл stdio.h.
Но это пол беды, в коде вы проверяете: (A[I] && MASK) == MASK, это означает, что сначала мы производим операцию И над элементом массива и маской, после чего сравниваем результат со значением маски, из этого следует что инкрементирование счётчика произойдёт только если значение элемента массива равно 21 (0x15), так что программа работает верно.
if ((A[I] & MASK) == MASK) это контроль указанных битов. В вашем случае MASK 0x15 указывает на три бита 10101. Если в данных эти биты присутствуют, то результатом будет сама маска, а если один из этих битов равен нулю, то результат будет не равен маске.
Например 'a' == 97 == 0x61 == 1100001. Маска 10101 даст результат 00001. То есть один бит правильный, а два других нет.
Зачем у вас такая маска не знаю. Я бы считал количество маленьких букв с помощью маски 0x20.