Вы, наверное, поняли post-increment
оператора, который является очень распространенным среди начинающих, так что не беспокойтесь. Со временем вы все исправите.
Взгляните на слово post-increment
. В нем есть слово post
, которое обычно обозначает after
. Это означает, что приращение произойдет after
все остальное выполнено. Так я и помню.
Так что, если вы посмотрите на вашу программу сейчас -
int main()
{
int w=3, z=7;
printf("%d\n", w++|z++);
}
тогда станет ясно, что после того, как сама printf
функция выполнена, то прирост будет. Таким образом, вы получите значение w
и z
как 3
и 7
, соответственно при оценке выражения второго аргумента printf
.
Официальный стандарт C++ 11, (§5.2.6, окончательная версия) говорит -
Значение выражения Постфиксный ++ является значение операнда. [Примечание: значение, полученное является копией исходного значения - конец примечания]
Так это означает, что значение выражения постфикса w++
, является значением самого операнда, то есть, значения w
, которое равно 3, а значение второго выражения z++
будет равно 7. Эти значения затем будут использоваться при вычислении 3|7
, после чего переменные будут увеличиваться.
«Что случилось со мной?» Мы не знаем. –
Возможно, вы ... но приоритет оператора, о котором вы думаете, не так: –
Вы должны создать минимальный пример, показывающий вашу проблему. Удалите бит 'x' и' i' и 'scanf'. –