Присоединяюсь к
venco и
Sender:
Ну, это как раз просто объясняется: приоритет унарного минуса выше возведения в степень. Иначе бы выражение 2^-2 вызывало бы ошибку транскрипции (или как это правильно называется, когда текстовый процессор анализирует выражения?).
3^3^3 вроде бы тоже не сложно объясняется: текст анализируется с лева на право, в то же время, тут имеется две подряд идущие одинаковые операции. Вот и получается (3^3)^3.
Это-то очевидно, но в среднем компьютерном языке представления выражений принято, чтобы возведение в степень было правоассоциативным, в подражание математике (тут действительно нечего добавить к наблюдению, что это разумнее, чем левоассоциативное возведение в степень, относительно экономии скобок), ну и приоритет унарного минуса тоже подбирается не таким высоким. С точки зрения дизайна языка такой сложности как матлабовский или даже выражения Excel, реализовать альтернативные варианты одинаково просто, так что это вопрос совести авторов.
Тут можно отметить, что есть ведь и языки, где запись выражений принципиально непохожа на обычную математическую (например лиспы и конкатенативные), вот от таких никто требовать конформности и не будет, а вот Excel или MATLAB имеют дело с людьми, хотя бы чуть-чуть привыкшими к математической записи и при этом не обязательно подкованными в произвольном программировании, так что тут как раз всё критичнее, чем в случае например хаскеля, где внезапно
-1 `mod` 3 = -1 и можно испугаться за
mod, а всё из-за странного приоритета, и следующее даёт уже правильный ответ:
(-1) `mod` 3 = 2.