Чем можно заменить запись

Чему будет равно выражение arr[i] % 2 && arr[i] % 6, если использовать в if и чтобы выполнилось? arr[i] % 2 == 0 && arr[i] % 6 == 0 или arr[i] % 2 == 1 && arr[i] % 6 == 1 Не до конца понимаю


Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

В C нет настоящего булевого типа. Роль булевых значений играют целые ноль и единица. Оператор && возвращает единицу если оба его аргумента не равны нулю, иначе - ноль.

Выражения A && B и A != 0 && B != 0 вычисляют одно и то же значение (иногда нужно добавить скобки).

В нашем случае arr[i] % 2 && arr[i] % 6 равносильно (arr[i] % 2 != 0) && (arr[i] % 6 != 0). Скобки надеты для ясности, обычно их не пишут. Языку не важно как вы записали выражение, легче читать вариант с != 0 - целые значения явно преобразуются в булевы.

Выражение arr[i] % 2 для положительных arr[i] может быть нулём или единицей. Можно написать (arr[i] % 2 == 1) && (arr[i] % 6 != 0). Ещё раз оговорюсь, эта замена верна только если вы уверены что arr[i] >= 0.

Вторую скобку, с шестёркой, никак не переделать, если записывать компактно.

Я бы писал так: arr[i] % 2 != 0 && arr[i] % 6 != 0. Читается как "arr[i] не делится на два и не делится на шесть".

→ Ссылка