Гость

Урок № 5 Выражения

В теме 4 сообщения

Выражения



Выражение - правило вычисления какого-либо значения.
В Pawn выражения состоят из операндов, объединённых знаками операций. Операндами могут быть константы, переменные и вызовы функций. Операции в выражении выполняются в строго заданном порядке, в зависимости от приоритетов, как в математике, от операций с высшим приоритетом до операци с самым низким приоритетом: сначала скобки, затем операции умножения и деления, сложение и вычитание и т.д. Для изменения порядка выполнения операций используются круглые скобки.

Операнды, участвующие в выражении, должны быть одинаковых или совместимых типов. Например, не допускается использование в одном и том же выражении операторов логического и целого типов. Однако допустимо использование целого и вещественного типов, в этом случае результатом будет вещественное число.

Приоритеты операций в Pawn (по убыванию):

Лексемы Операция
++ -- положительное и отрицательное приращение на 1
~ побитовое НЕ
! логическое НЕ
+ - сложение, вычитание
<< >> побитовый сдвиг влево/вправо
== != равенство/неравенство
< > <= >= отношения
& побитовое И
^ побитовое исключающее ИЛИ
| побитовое ИЛИ
&& логическое И
|| логическое ИЛИ
? : условие
= += -= *= /= %= <<= >>= &= ^= |= присваивание

Примеры выражений:



0	// вернёт целое число 0
0.0	// вернёт вещественное число 0

2+2	// 4
2+2*2	// 6
(3+2)*2/5	// 2
(3+2)*2/3	// 3 (1 в остатке)
(3+2)*2%3	// 1 (остаток от деления 10 на 3)
(3.5+2.5)*2.0/4.0	// 2.75
1 && 0	// 0
1 && 1	// 1
1 || 0	// 1
1 << 2	// 4 (1<<X = 1*2X, 1<<2 = 1*22 = 1*4 = 4)
12 >> 2	// 3 (12>>2 = 12/22 = 12*4 = 3)
= ! //вернет обратное булеан значение
= !! //превратит в булеан значение


Также выражения можно использовать в качестве операндов функций и значений переменных или констант, об этом будет вестись речь в следующих уроках.

Отредактировано пользователем Shakoladka

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть еще такое:

= ! //вернет обратное булеан значение
= !! //превратит в булеан значение

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не увидел ничего про оператор запятой в скобке. Этот оператор вызывает последовательное выполнение каких-либо действий (указанных в скобках). Выполнение идет слева направо. Соответственно правое выражение будет результирующим, а остальные, если так можно сказать, выполняются фоново.

stock StartFunc(&var)
{
	var += 2;
}

stock MyFunc()
{
	new a = 4, c;
	new b = (StartFunc(a), c = 3, a+1);
	printf("%d", b); // 7
	printf("%d", c); // 4
}

Ну, и пример попроще:

new a = 1;
new b = (a++, a); // a = 2, b = 2

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!


Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.


Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу