.. index:: 
	single: Operators; Introduction

=========
Operators
=========

In this chapter we will introduce the operators provided by the Ring programming language.

.. index:: 
	pair: Operators; Arithmetic Operators


Arithmetic Operators
====================

The next table presents all of the arithmetic operators 
provided by the Ring language. Assume variable X=50 and variable Y=10 then:

+------------+---------------+----------+---------+
| Operator   | Description   | Example  | Result  |
+============+===============+==========+=========+
| \+	     |  Add	     |  x+y     |  60     |
+------------+---------------+----------+---------+
| \-         |	Subtract     |	x-y     |  40     |
+------------+---------------+----------+---------+
| \*	     |  Multiplies   |	x*y     |  500    |
+------------+---------------+----------+---------+
| /          |  Divide	     |	x/y     |  5      |
+------------+---------------+----------+---------+
| %          |  Modulus	     |	x%y     |  0      | 
+------------+---------------+----------+---------+
| ++         |  Increment    |	x++     |  51     |
+------------+---------------+----------+---------+
| \- \-      |  Decrement    |	x\- \-  |  49     |
+------------+---------------+----------+---------+

.. index:: 
	pair: Operators; Relational Operators

Relational Operators
====================

The next table presents all of the relational operators 
provided by the Ring language. Assume variable X=50 and variable Y=10 then:

+------------+---------------------+-------------+---------+
| Operator   | Description         | Example     | Result  |
+============+=====================+=============+=========+
| =	     |  Equal	           |    x = y    |  False  |
+------------+---------------------+-------------+---------+
| !=         |	Not Equal          |	x != y   |  True   |
+------------+---------------------+-------------+---------+
| >	     |  Greater than       |	x > y    |  True   |
+------------+---------------------+-------------+---------+
| <          |  Less than 	   |	x < y    |  False  |
+------------+---------------------+-------------+---------+
| >=         |  Greater or Equal   |	x >= y   |  True   | 
+------------+---------------------+-------------+---------+
| <=         |  Less than or Equal |	x <= y   |  False  |
+------------+---------------------+-------------+---------+


.. index:: 
	pair: Operators; Logical Operators

Logical Operators
=================

The next table presents all of the logical operators 
provided by the Ring language. Assume variable X=True and variable Y=False then:

+------------+---------------------+-------------+---------+
| Operator   | Description         | Example     | Result  |
+============+=====================+=============+=========+
| and	     |  Logical AND        |    x and y  |  False  |
+------------+---------------------+-------------+---------+
| or         |	Logical OR         |	x or y   |  True   |
+------------+---------------------+-------------+---------+
| not	     |  Logical Not        |	not x    |  False  |
+------------+---------------------+-------------+---------+

Another style

+------------+---------------------+-------------+---------+
| Operator   | Description         | Example     | Result  |
+============+=====================+=============+=========+
| &&	     |  Logical AND        |    x && y   |  False  |
+------------+---------------------+-------------+---------+
| ||         |	Logical OR         |	x || y   |  True   |
+------------+---------------------+-------------+---------+
| !	     |  Logical Not        |	! x      |  False  |
+------------+---------------------+-------------+---------+


.. index:: 
	pair: Operators; Bitwise Operators

Bitwise Operators
=================

The next table presents all of the bitwise operators 
provided by the Ring language. Assume variable X=8 and variable Y=2 then:

+------------+-----------------------------+-------------+---------+
| Operator   | Description                 | Example     | Result  |
+============+=============================+=============+=========+
| &	     |  Binary AND                 |    x & y    |  0      |
+------------+-----------------------------+-------------+---------+
| \|         |	Binary OR                  |	x \| y   |  10     |
+------------+-----------------------------+-------------+---------+
| ^	     |  Binary XOR                 |	x ^ y    |  10     |
+------------+-----------------------------+-------------+---------+
| ~          |  Binary Ones Complement 	   |	~x       |  -9     |
+------------+-----------------------------+-------------+---------+
| <<         |  Binary Left Shift          |	x << y   |  32     | 
+------------+-----------------------------+-------------+---------+
| >>         |  Binary Right Shift         |	x >> y   |  2      |
+------------+-----------------------------+-------------+---------+


.. index:: 
	pair: Operators; Assignment Operators

Assignment Operators
====================

The next table presents all of the assignment operators 
provided by the Ring language.

Assume variable X=8 then:

+------------+-----------------------------+-------------+---------+
| Operator   | Description                 | Example     | Result  |
+============+=============================+=============+=========+
| =	     |  Assignment                 |    x = 10   |  x=10   |
+------------+-----------------------------+-------------+---------+
| +=         |	Add AND assignment         |	x += 5   |  x=13   |
+------------+-----------------------------+-------------+---------+
| -=	     |  Subtract AND assignment    |	x -= 3   |  x=5    |
+------------+-----------------------------+-------------+---------+
| \*=        |  Multiply AND assignment    |	x \*= 2  |  x=16   |
+------------+-----------------------------+-------------+---------+
| /=         |  Divide AND assignment      |	x /= 3   |  x=2.67 |
+------------+-----------------------------+-------------+---------+
| %=         |  Modulus AND assignment     |	x %= 2   |  x=0    | 
+------------+-----------------------------+-------------+---------+
| <<=        |	Left shift AND assignment  |	x <<= 2  |  x=32   |
+------------+-----------------------------+-------------+---------+
| >>=	     |  Right shift AND assignment |	x >>= 2  |  x=2    |
+------------+-----------------------------+-------------+---------+
| &=         |  Bitwise AND assignment     |	x &= 4   |  x=0    |
+------------+-----------------------------+-------------+---------+
| \|=        |  Bitwise OR and assignment  |	x \|= 3  |  x=11   |
+------------+-----------------------------+-------------+---------+
| ^=         |  Bitwise XOR and assignment |	x ^= 4   |  x=12   |
+------------+-----------------------------+-------------+---------+

.. index:: 
	pair: Operators; Misc Operators

Misc Operators
==============

==============	======================================================================
Operator	Description
==============	======================================================================
:literal	using : before identifier mean literal
Start:End	create list contains items from start to end
[list items]	define list items
list[index]	access list item
obj.name	using the dot operator to access object members (attributes/methods).
obj {stmts}	execute statements with direct access to object attributes & methods
func(para,...)	call function using parameters separated by comma
? <expr>	Print expression then new line
==============	======================================================================

.. index:: 
	pair: Operators; Operators Precedence

Operators Precedence
====================

The next table present operators from higher precedence (Evaluated first) to 
lower precedence.

+----------------------------------------------------------------+
| Operator							 |
+================================================================+
| .  []   ()     {}	 	 				 |
+----------------------------------------------------------------+
| \-  \~  :Literal  [list items]				 |
+----------------------------------------------------------------+
| ++   \- \-							 |
+----------------------------------------------------------------+
| Start:End							 |
+----------------------------------------------------------------+
| \* /  %							 |
+----------------------------------------------------------------+
| \+ \-								 |
+----------------------------------------------------------------+
| <<   >>							 |
+----------------------------------------------------------------+
| &								 |
+----------------------------------------------------------------+
| \|  ^								 |
+----------------------------------------------------------------+
| <  >  <=  >= 							 |
+----------------------------------------------------------------+
| =  !=								 |
+----------------------------------------------------------------+
| not	!							 |
+----------------------------------------------------------------+
| and   or   &&	   ||						 |
+----------------------------------------------------------------+
| Assignment = += -= \*= /= %=>>= <<= &= ^= \|= 		 |
+----------------------------------------------------------------+
| ?						 		 |
+----------------------------------------------------------------+

Example:

.. code-block:: ring

	See 3+5*4	# prints 23