2.3. Operadores

Los operadores permiten construir sentencias m�s complejas. Es posible concatenar operaciones. Su precedencia es semejante a la de otros lenguajes, pero es posible modificarla agrupando las expresiones entre par�ntesis.

Sugerencia

Para obtener la lista completa de la precedencia de los operadores teclear help -i precedence

2.3.1. Operadores aritm�ticos

Operan sobre escalares y matrices.

Tabla 2-2. Operadores aritm�ticos

OperadorDescripci�n
x + ySuma. Si los dos operadores son matrices las dimensiones deben coincidir. Si no el escalar se suma a cada elemento de la matriz.
x .+ ySuma elemento a elemento. Esta operaci�n es equivalente a +.
x - yResta. El resultado es equivalente a x + (-y), donde -y representa el opuesto de y.
x .- yResta elemento a elemento. Esta operaci�n equivale a -.
x * yMultiplicaci�n de matrices. El n�mero de columnas de x debe coincidir con el n�mero de filas de y.
x .* yMultiplicaci�n de matrices elemento a elemento.
x / yDivisi�n a derechas. Conceptualmente es equivalente a (inverso (y') * x')', pero sin necesidad de calcular la inversa de y ni calcular las transpuestas de las matrices.
x ./ yDivisi�n elemento a elemento, de los elementos de x divididos por los elementos de y.
x \ yDivisi�n por la izquierda. Conceptualmente es equivalente a inverso (x) * y.
x .\ yDivisi�n elemento a elemento, de los elementos de y entre los elementos de x
x ^ y o x ** yOperaci�n de exponenciaci�n. Ambos operadores no pueden ser matrices, y si alguno es matriz, deber� ser cuadrada.
x .^ y o x .** yExponenciaci�n, elemento a elemento. Si ambos operadores son matrices, deber�n tener igual dimensi�n.
-xNegaci�n. Se obtiene el escalar opuesto o la matriz de igual dimensi�n y cuyos elementos son los opuestos de la matriz original.
+xOperador suma unitario. No tiene ninguna consecuencia sobre el operando.
x'Conjugado complejo y transpuesta. Para n�meros reales es equivalente a la transposici�n.
x.'Transposici�n de los elementos de x. No se conjugan los elementos.
++xOperador de preincremento. Equivalente a ejecutar la expresi�n x=x+1 antes de acceder al valor de x
--xOperador de predecremento. Equivalente a ejecutar la expresi�n x=x-1 antes de acceder al valor de x
x++Operador de postincremento. Equivalente a ejecutar la expresi�n x=x+1 despu�s de acceder al valor de x
x--Operador de postdecremento. Equivalente a ejecutar la expresi�n x=x-1 despu�s de acceder al valor de x

Sugerencia

Si el valor de la variable predefinida warm_divide_by_zero es distinto de cero, y en alg�n caso se produce una divisi�n por cero, Octave imprime un aviso y contin�a con las operaciones.

2.3.2. Operadores de comparaci�n.

Todos los operadores de comparaci�n devuelven un valor 1 si la comparaci�n es cierta, y 0 si es falsa. Para matrices las operaciones se realizan operando a operando. Por ejemplo:

	  octave> [1 2; 3 4] == [1 3; 2 4]
	  ans =
	    1 0
	    0 1
	

Si un operador es escalar y el otro una matriz, el escalar se compara con cada elemento de la matriz y el resultado tiene las mismas dimensiones que la matriz.

Tabla 2-3. Operadores de comparaci�n

OperadorDescripci�n
x < yCierto si x es menor que y.
x <= yCierto si x es menor o igual que y.
x == yCierto si x es igual que y.
x > yCierto si x es mayor que y.
x >= yCierto si x es mayor o igual que y.
x != y o x ~= y o x <> yCierto si x no es igual a y.

Sugerencia

Las comparaciones con cadenas de caracteres pueden hacerse con la funci�n strcmp.

2.3.3. Operadores booleanos

El resultado de un operador booleano es una matriz de dimensi�n equivalente a los operandos, donde cada elemento es el resultado de aplicar el operador booleano a los elementos correspondientes. Se considera como cierto un valor distinto de cero, y falso un valor igual a cero.Los operadores booleanos se pueden emplear en las mismas situaciones que los operadores de comparaci�n. Si adem�s se utilizan en estructuras de control de flujo (if o while) s�lo ser�n cierto si todos los elementos son distintos de cero.

	  octave> [1 0] & [1 1]
	  ans = 1 0
	

�nicamente hay tres operadores booleanos:

Tabla 2-4. Operadores booleanos

OperadorDescripci�n
boolean1 & boolean2Operador 'and' l�gico. Cada elementos del resultado es cierto si los elementos correspondientes de los operandos lo son.
boolean1 | boolean2Operador 'or' l�gico. Cada elementos del resultado es cierto si alguno de los elementos correspondientes de los operandos lo es.
! boolean o ~ booleanOperador 'not' l�gico. Cada elemento del resultado toma el valor booleano opuesto al del operando.

2.3.4. Operadores booleanos "short-circuit"

Los operadores booleanos de "corto circuito" son semejantes a los operadores booleanos, con la diferencia de que si despu�s de evaluar el primer operando, ya es suficiente para obtener el resultado, no se comprueba el segundo operando.

Tabla 2-5. Operadores binarios de corto circuito

OperadorDescripci�n
boolean1 && boolean2El operando boolean1 es evaluado y convertido a un escalar (el resultado es an�logo a all(boolean1)). Si el resultado es falso, la operaci�n termina con resultado falso. Si es cierto se realiza la misma operaci�n con el segundo operando y este ser� el resultado de la operaci�n.
boolean1 || boolean2El operando boolean1 es evaluado y convertido a un escalar (el resultado es an�logo a any(boolean1). Si el resultado es verdadero, la operaci�n termina con resultado verdadero. En cambio si fue falso se eval�a de la misma manera el segundo operando el resultado obtenido ser� el resultado de la operaci�n.

La diferencia entre los operadores binarios normales y los de cortocircuito se ver� mejor con un ejemplo:

	  octave> a=0; b=0; a & b++, b
	  ans = 0
	  b = 1
	  octave> a=0; b=0; a && b++, b
	  ans = 0
	  b = 0
	

En el segundo caso, b ser� incrementado s�lo si a es verdadero. En el primer caso b siempre ser� incrementado.

2.3.5. Operador de asignaci�n

El signo = es el operador de asignaci�n. Despu�s de una asignaci�n una variable cambia de valor y de tipo para acomodarse al del nuevo valor. El operador asignaci�n es la �nica manera de poder almacenar valores. En el lado derecho puede aparecer cualquier expresi�n de las descritas anteriormente en este cap�tulo, o funciones que devuelvan un valor. En el lado izquierdo podemos tener variables, elementos de una matriz o vector, o listas de valores de retorno (este concepto se aclarar� en el apartado dedicado a funciones). Ejemplos:

	  octave> a=1;
	  octave> b=ones(2,3);
	  octave> b(:,1)= 2
	  b =
	    2 1 1
	    2 1 1
	  octave> [d c]= size(b);
	  octave> e=["esta " "es " "una " "cadena"];