Что означает y - = m
просматривая какой-то пример кода C, я наткнулся на это:
y -= m < 3;
что это значит? Это какой-то сокращенный цикл или что? Это невозможно для google, насколько я знаю.
7 ответов:
m < 3либо1или0в зависимости от значения истины.так
y=y-1, когдаm<3иtrueилиy=y-0, когдаm>=3
если разбить его по порядку приоритета для каждой операции, вы получите:
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предложения.
Я имею в виду
if (m < 3) { y -=1; }с(m < 3)равно 1, если m меньше 3, 0 в противном случае.код появляется в какой-то седой старой справочной реализации чего-то, что связано с високосными годами или Пасхой, или, возможно, обоими: первые два месяца январь и февраль особенные, потому что они происходят до високосного дня. На самом деле нет никакого оправдания для написания такого кода, если вам действительно не нравится его внешний вид. Большинство людей этого не делают.
m < 3вычисляется как 1, Если m меньше 3. Следовательно, y в этом случае уменьшается на единицу. Таким образом, оператор if избегается.
Я не могу сказать, вы хотите это на, но я могу сказать вам, что она делает:
m < 3возвращает int 0 или 1, представляющий логическое значение.если m меньше 3, оператор evalutates как:
y -= 1илиy = y - 1;если m больше или равно 3, оператор evalutates как
y -= 0илиy = y - 0. В целом в этом случае заявление ничего не делает.
<имеет более высокий приоритет перед знаком равенства=так чтоm<3возвращает 1, Еслиmменьше 3, а остальное-0тогда y = y-1 или y = y - 0
Я согласен, что код эквивалентен
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;Кросс-системная совместимость-это большая причина, чтобы избежать "умного" кода, такого как этот.