разрезать на погоню, ответ «s is 20, и t не может быть определен». Я понимаю часть, которая равна 20, но почему t невозможно определить? Пожалуйста, помогите мне!Рассмотрим этот код: "int s = 20; int t = s ++ + --s;". Каковы значения s и t?
ответ
int s = 20;
int t = s++ + --s;
Рабочее: приращение (пост приращение) с 21 (текущим значением 20) + декремент (предварительно декремент) до 20 лет (текущего значения 20).
So, t=20+20;
And s =20;
После учета приоритета и скобок Java гарантирует, что выражения будут оцениваться слева направо. Например, чтобы оценить eat() + drink() - beMerry(), Java сначала оценит eat(), затем напишет(), затем выполнит добавление, затем оценит beMerry() и, наконец, выполнит вычитание. eat() оценивается перед напитком(), потому что eat() находится слева от drink(), а выражения оцениваются слева направо. Эта гарантия важна, потому что вызовы eat() и drink() могут иметь побочные эффекты, которые могут отличаться, если они были вызваны в обратном порядке.
Возможно, вы захотите объяснить little _why_ вы вычисляете, как и вы (например, слева направо, а не справа налево, например) –
@JoachimIsaksson Я отредактировал свой ответ, как вы сказали. Спасибо –
Чтение this:
Так как оператор инкремента/декремента изменяет свой операнд, использование такой операнд больше, чем один раз в пределах одной и той же выражение может производить неопределенные результаты. Например, в выражениях, таких как x - ++ x, неясно, в какой последовательности должны выполняться операторы вычитания и приращения . Подобные ситуации еще более усложняются, когда компилятор применяет , что может привести к тому, что порядок выполнения операций будет отличаться от того, что планировал программист .
Теперь, вы отвечаете, должно быть довольно ясно. Мне кажется, что значение t может варьироваться в зависимости от компилятора/оптимизации.
Вот еще информация: http://www.gnu.org/software/gnu-c-manual/gnu-c-manual.html#Sequence-Points-Constrain-Expressions
Этот ответ действителен для C/C++, но не для Java. http://stackoverflow.com/a/4978933/477878 –
- 1. Разница между s = s + s и s + = s с короткими
- 2. ORA-21500: внутренний код ошибки, аргументы: [% s], [% s], [% s], [% s], [% s], [% s], [% s], [% s]
- 3. "while (* s ++ = * t ++)" и malloc
- 4. * t ++ = * s ++; String copy
- 5. Разница между char * s = new char [] и char s [20]?
- 6. Несколько int main() 's?
- 7. Какой unicode он должен сделать такой эффект? = ͟͟͞͞s = ͟͟͞͞s = ͟͟͞͞s = ͟͟͞͞s = ͟͟͞͞s = ͟͟͞͞s = ͟͟͞͞s = ͟͟͞͞s
- 8. Сравнение int и Vector2's
- 9. Является ли s s эквивалентом s [i]?
- 10. Для множеств S и T, почему S - = T Python принимает O (len (T)), а не O (len (S))?
- 11. Учитывая строку S и строку T, подсчитайте количество различных подпоследовательностей T в S
- 12. C указатели: разница между while (* s ++) {;} и while (* s) {s ++;}
- 13. Поиск конца строки: * s ++ VS * s, затем s ++
- 14. Есть ли разница между s ++ и * s ++?
- 15. Regex ", \\ s (. *?), \\ s"
- 16. Что происходит быстрее - с использованием int * s = new int [size] или int s [size] + std :: fill_n (s, size, 0) ;?
- 17. В python, почему s * 3 быстрее, чем s + s + s?
- 18. Если S содержит анонимное поле T, применяются ли наборы методов S включенных методов с приемником * T?
- 19. Почему logging.warning ("% s", s)?
- 20. fscanf ("% s% s", комета, группа);
- 21. Если с S на T существует преобразование идентичности, должно быть, что S и T являются одинаковыми?
- 22. В чем разница между \ s и \ t?
- 23. Команды управления SVG «s» и «t»
- 24. string s; &s+1; Legal? UB?
- 25. неподдерживаемый тип (s) операнд + =: 'INT' и 'ул'
- 26. Отправка int [] s между Java и C
- 27. Почему [\\ s *] не эквивалентен \\ s *?
- 28. Как «while (* s ++ = * t ++)» скопировать строку?
- 29. Свернуть и (lambda s: "" .join (s.split())) или (lambda s: s)
- 30. В чем разница между printf (s) и printf («% s», s)?
Где вы нашли ответ, который вы даете? –
't' можно определить: http://ideone.com/6ja0Kv –
Вы думаете, о, я не знаю, попробуй и посмотри? «невозможно определить» - это ... глупость. –