-1^2 = -1, приоритет выше у степени
Да. У степени выше. Это
показательное выражение. У нас есть 2 варианта подсчёта. И именно приоритет операций велит сначала возводить в степень.
2^-1 = 1/2, приоритет выше у унарного минуса ...
Нет, не выше. Здесь нет различных вариантов подсчётов. Поэтому выражение
не показательно Короче, вы неправильно понимаете понятие "приоритет".
Вот вы пишите на C++, значит вам известно, что в выражении a[4+5] сначала посчитается сумма, а уже потом произойдёт обращение к элементу массива по индексу. Хотя приоритет оператора [] намного выше, чем сложения. Предлагаю в качестве закрепления темы самому придумать
показательное выражение, из результата вычисления которого мы можем сравнить приоритеты + и []
-- Вт май 06, 2014 17:32:22 --По теме топика.
1 2 3 - - - можно толковать например как (-(1-(2-3)))=-2 или же как (1-(2 - (-3)))=-4
Дёшево вы эту проблему никак не решите. Если ничего не сделать, то рождается неоднозначность.
У вас есть 3 варианта, насколько я знаю.
1) Ввести отдельный знак для унарного минуса как операции. Например '~' или '!'
Я так делал.
2) Вообще отказаться от унарного минума как от операции и оставить его лишь как часть числа. Разделять случаи минуса как бинарной операции и минуса как части числа можно банально наличием пробела между минусом и операндом, который идёт после него во входном потоке. Если слитно, то это одно цельное число, а если раздельно, то это оператор и число.
На глаз случаи тоже прекрасно отличаются, "5 -4 +"=1, а "5 - 4 +"=syntax error
Правда тогда выражения типа "-(4+5)" вообще будет нельзя записать в ОПН, ну что поделать.
Так я тоже делал.
3) Разработать самому какие-то контекстные правила отличия бинарного и унарного минуса как операций. Например снова по какому-то "пробельному" символу до или после символа '-'
Так я не делал, и вообще этот вариант только сейчас придумал.
-- Вт май 06, 2014 17:37:26 --2 и 3 случай очевидно для ситуации, когда ввод выражения в ОПН идёт юзером прям с клавиатуры. Если нет, то эти заморочки с пробелами конечно же не нужны.