C программирующий ++ оператор

Почему это кодирует, всегда производят x=2?

unsigned int x = 0;
x++ || x++ || x++ || x++ || ........;
printf("%d\n",x);
12
задан James McMahon 14 January 2010 в 19:55
поделиться

10 ответов

1-я x++ меняет x на 1 и возвращает 0
. 2-я x++ меняет х на 2 и возвращает 1

, в которой точка или короткое замыкание, возвращает истину и оставляет х на 2.

30
ответ дан 2 December 2019 в 02:57
поделиться

x ++ || х ++ || х ++ || х ++ || ........;

  • Первый X ++ оценивается на 0 сначала для условной проверки, а затем приращение. Таким образом, первое условие не удается, но X увеличивается до 1.
  • Теперь вторые оцениваются вторые X ++, что оценивает до 1 для условной проверки, а x увеличивается на 2. Поскольку выражение оценивается до 1 (True), нет нужно идти дальше.
11
ответ дан 2 December 2019 в 02:57
поделиться

1 x ++ Изменяет x до 1 и возвращает 0
2-й X ++ изменяет x до 2 и возвращает 1

, в результате чего точка или короткие схемы возвращаются истины и оставляет x на 2.

-121--2741457-

|| короткие замыкания. Оценивается слева, когда найден истинное значение (ненулевое значение), он останавливает оценку, поскольку выражение сейчас верно и никогда не может быть ложным снова.

Сначала X ++ оценивается до 0 (поскольку это пост-приращение), второе до 1, что верно, а Presto, вы закончите!

5
ответ дан 2 December 2019 в 02:57
поделиться

, поскольку логичный ИЛИ короткие замыкания, когда истинное найдено.

, Таким образом, первый x ++ возвращается 0 (ложь), потому что это - постинкремент. (x = 1) Второй x ++ возвращается 1 (верный) - короткие замыкания. (x = 2)

Печать x = 2;

1
ответ дан 2 December 2019 в 02:57
поделиться

попытка замены || с | . -

Это - срывание логических операторов.

Это - та же причина, когда вы сделаете

if (returns_true() || returns_true()){ }

, returns_true только назовут однажды.

0
ответ дан 2 December 2019 в 02:57
поделиться

Когда вы оцениваете «a || b || c || d || e || ...», вы можете перестать оценивать при первом ненулевом значении.

Первый «X ++» оценивается до 0, а приращения X до 1 и оценка выражения продолжается. Второй x ++ оценивается до 1, увеличивает x до 2, и в этот момент вы не должны смотреть на остальные или оператор, чтобы знать, что он будет правдой, поэтому вы остановитесь.

2
ответ дан 2 December 2019 в 02:57
поделиться

, потому что первый «X ++ || X ++» оценивает «true» (что означает, что это не ноль, потому что «0 || 1» верно. Так как они все логические или операторы остальные или операции игнорируются.

Майк

1
ответ дан 2 December 2019 в 02:57
поделиться

Оператор || Оператор оценивает выражение левого рук, и если оно 0 (false), то он оценивает правопреемное выражение. Если левая сторона не 0, то она вообще не оценивает правую сторону.

В выражении х ++ || х ++ || х ++ || ... , первый X ++ оценивается; Он оценивается до 0, и X увеличивается на 1. Второе x ++ оценивается; Он оценивает 1, и X увеличивается до 2. С второго x ++ оценивается с ненулевым значением, ни один из оставшихся выражений x ++ оценивается.

1
ответ дан 2 December 2019 в 02:57
поделиться

Из-за ранней оценки сравнений.

Это эквивалент

 0++ | 1++

Компилятор прекращает сравнение, как только x==1, затем он постует инкременты, делая x==2

.
1
ответ дан 2 December 2019 в 02:57
поделиться

Оператор < > используется в стандарте SQL, поэтому большинство знающих SQL пользователей привыкнут к нему или, по крайней мере, знают об этом. Я сам даже не знал, что оператор ! = также был доступен в некоторых диалектах SQL до недавнего времени.

Как вы заметили, люди, как правило, используют только один или другой, и это хороший подход, по крайней мере, на проектной основе. Независимо от того, что вы выберете, будьте последовательны.

-121--1275922-

Надеюсь, что это не будет дыра в безопасности!:)

Но если оба ваших сайтов являются поддоменами в одном домене, может помочь document.domain .

-121--3057614-

Из-за короткого замыкания при вычислении логического выражения и из-за того, что | | является последовательностью , пунктом в C и C++.

9
ответ дан 2 December 2019 в 02:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: