Sign in to follow this  
Followers 0
Guest

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

4 posts in this topic

Выражения



Выражение - правило вычисления какого-либо значения.
В 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)
= ! //вернет обратное булеан значение
= !! //превратит в булеан значение


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

Edited by Shakoladka

Share this post


Link to post
Share on other sites

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

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

 

Share this post


Link to post
Share on other sites

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

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

 

Share this post


Link to post
Share on other sites

Your content will need to be approved by a moderator

Guest
You are commenting as a guest. If you have an account, please sign in.
Reply to this topic...

×   You have pasted content with formatting.   Remove formatting

  Only 75 emoticons maximum are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

Loading...
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.