Arithmetical operators `+,-,*,/,%`

are defined elementwise
between array expressions, as well as broadcastwise if one argument is
a scalar. For example if x and y and z are arrays, and a is a scalar,

z=x+a*y => for (i=0; i<idx.size(); i++) z[i]=x[i]+a*y[i];

Indexing operators [] can either take a single integer argument, which refers to a single array or expression element, or it can take an integer array expression, which performs vector indexing. So

y=x[idx]; => for (i=0; i<idx.size(); i++) y[i] = x[idx[i]]; y[idx]=x; => for (i=0; i<idx.size(); i++) y[idx[i] = x[i];

Comparison operators `<`

, `>`

etc, and logical operators
`&&`

, `||`

are also defined in elementwise and broadcast versions.

`operator<<(expression1,expression2)`

is a concatenation
operator, appending the elements of expression2 to the end of the
elements of expression1.

Compound assignment variants also exist:

x+=y; => x=x+y; x*=y; => x=x*y; ... x<<=y; => x=x<<y;