Подтвердить что ты не робот

Что означает y - = m <3?

Просматривая пример кода C, я натолкнулся на это:

y -= m < 3;

Что это делает? Это какая-то конденсированная петля или что-то в этом роде? Насколько мне известно, Google недоступен.

4b9b3361

Ответ 1

m < 3 является либо 1, либо 0, в зависимости от значения истины.

So y=y-1, когда m<3 равно true или y=y-0, когда m>=3

Ответ 2

Если вы нарушите его по порядку приоритета для каждой операции, вы получите:

y = (y - (m < 3));

m < 3 получает оценку и возвращает логический результат 1 или 0, поэтому выражение можно упростить как

y = y - 1; // if m < 3 is true

или

y = y - 0; // if m < 3 is false

Цель этого - избежать предложения if.

Ответ 3

I означает if (m < 3) { y -=1; }, так как (m < 3) равно 1, если m меньше 3, 0 в противном случае.

Код появляется в какой-то серой старой ссылочной реализации того, что связано с високосными годами или Пасхой, или, возможно, с обоими: первые два месяца января и февраля являются особенными, потому что они происходят до високосного дня. На самом деле нет никакого оправдания для написания такого кода, если вам не нравится его внешний вид. Большинство людей этого не делают.

Ответ 4

m < 3 оценивается в 1, если m меньше 3. Следовательно, y уменьшается на один в этом случае. Таким образом, избегается утверждение if.

Ответ 5

Я не могу сказать, что вы хотите для, но я могу сказать вам, что он делает:

m < 3 возвращает значение int 0 или 1, представляющее логическое значение.

если m меньше 3, оператор evalutates выглядит как: y -= 1 или y = y - 1;

если m больше или равно 3, оператор evalutates равен y -= 0 или y = y - 0. В целом в этом случае оператор ничего не делает.

Ответ 6

< имеет более высокий приоритет на знак равенства = поэтому m<3 возвращает 1, если m меньше 3, а еще 0

то y = y - 1 или y = y - 0

Ответ 7

Я согласен, что код эквивалентен if(m<3) y=y-1;

Однако это небезопасный код, потому что в то время как FALSE всегда 0, TRUE имеет несколько определений. В настоящее время TRUE равен 1 в большинстве программных систем, но в более старых системах он равен -1 (где все биты, где установлено значение on, а не только последнее). Поэтому, если этот код работает на более старой платформе, он может перевести на if(m<3) y=y-(-1); или if(m<3) y=y+1; Кросс-совместимость системы - большая причина, чтобы избежать "умного" кода, подобного этому.