# Operadores y funciones disponibles

Crear expresiones utilizando datos, operadores, funciones matemáticas y conversiones de tipos de datos.

### Operadores

#### Operador de enteros

Utilice los operadores que se muestran a continuación para llevar a cabo operaciones aritméticas. Utilícelos para calcular valores numéricos, como "NivelTanque + 60".

Operador | Expresión | Descripción
[+] | X + Y | Agregar
[-] | X - Y | Restar
[*] | X * Y | Multiplicar
[/] | X / Y | Dividir
[%] | X % Y | Resto de la división
[()] | (X + Y)*10 |

Utilice el operador de suma (+) para realizar la concatenación de cadenas. Es decir, se pueden concatenar cadenas con el símbolo de suma, "Hola" + " " + "Pedro" crea la cadena "Hello Pedro".

#### Operador Bitwise

Operador | Expresión | Descripción
[>>] | X >> Y | Desplazamiento hacia la derecha. Desplaza los bits en X hacia la derecha, según el número Y de posiciones de bit. Conserva el signo.
[<<] | X << Y | Desplazamiento hacia la izquierda. Desplaza los bits en X hacia la izquierda, según el número Y de posiciones de bit. Conserva el signo.
[>>>] | X >>> Y | Relleno cero, desplazamiento hacia la derecha. Desplaza los bits en X hacia la derecha, según el número Y de posiciones de bit, y rellena los bits desplazados hacia la izquierda con 0, por lo que no conserva el signo.
[&] | X & Y | Devuelve el resultado de la operación AND a nivel de bit. Si X = 0110; Y= 0100, el resultado es 1100
[|] | X | Y | Devuelve el resultado de la operación OR a nivel de bit. Si X = 0110; Y= 1110, el resultado es 1100
[^] | X ^ Y | Devuelve el resultado de la operación XOR a nivel de bit. Si X = 0110; Y= 1010, el resultado es 1100
[~] | ~X | Gira los bits en el valor X. Si X = 0110; el resultado es 1001
[!] | !X | Devuelve true cuando X no es igual

Nota:

- OR/AND/XOR/NOT siempre devuelven un valor entero sin signo de 32 bits.
- Cuando el valor de entrada es negativo, las expresiones de desplazamiento de bits devuelven un valor entero de 32 bits.
- Cuando el valor de entrada es positivo, las expresiones de desplazamiento de bits devuelven un valor entero sin signo de 32 bits.

#### Operador de salida BOOL

Estos operadores comparan dos valores. La expresión devuelve true cuando la comparación definida es verdadera. La expresión devuelve false cuando la comparación definida es falsa. Utilícelos para comparar valores numéricos, como "NivelTanque > 30".

Cuando uno de los siguientes casos ocurre en un valor, el resultado es indefinido:

- Error de comunicación (la variable es de "mala" calidad)
- Accediendo a un número de elemento de matriz que está fuera de los límites

- Dividir por cero.

Operador | Expresión | Descripción
- [&&] | X && Y | AND lógico. Nota: Las expresiones BOOL en un convertidor deben evaluarse a un valor booleano. Si la expresión se evalúa a cualquier otro tipo de dato, el valor es indefinido. Aunque el valor de uno de los operandos no se haya definido, la condición lógica resultante podría evaluarse como false si el otro operando es false. Véase la siguiente tabla.
  Operador izquierdo | Operador derecho | Resultado
  indefinido | indefinido | indefinido
  indefinido | true | indefinido
  indefinido | false | false
  true | indefinido | indefinido
  false | indefinido | false
- [||] | X || Y | OR lógico. Nota: Las expresiones BOOL en un convertidor deben evaluarse a un valor booleano. Si la expresión se evalúa a cualquier otro tipo de dato, el valor es indefinido. Aunque el valor de uno de los operandos no se haya definido, la condición lógica resultante podría evaluarse como true si el otro operando es true. Véase la siguiente tabla.
  Operador izquierdo | Operador derecho | Resultado
  indefinido | indefinido | indefinido
  indefinido | true | true
  indefinido | false | indefinido
  true | indefinido | true
  false | indefinido | indefinido
[==] | X == Y | Devuelve true cuando X es igual que Y.
[!=] | X != Y | Devuelve true cuando X es diferente a Y.
[<=] | X <= Y | Devuelve true cuando X es menor o igual a Y. Nota: Este operador no se puede utilizar para las variables BOOL, STRING y WSTRING.
[>=] | X >= Y | Devuelve true cuando X es mayor o igual a Y. Nota: Este operador no se puede utilizar para las variables BOOL, STRING y WSTRING.
[<] | X < Y | Devuelve true cuando X es menor que Y. Nota: Este operador no se puede utilizar para las variables BOOL, STRING y WSTRING.
[>] | X > Y | Devuelve true cuando X es mayor que Y. Nota: Este operador no se puede utilizar para las variables BOOL, STRING y WSTRING.

### Math

Método | Descripción
abs(a) | Devuelve el valor absoluto. parámetro: integer, devolver: integer -o- parámetro: long, devolver: long -o- parámetro: float, devolver: float -o- parámetro: double, devolver: double
acos(double a) | Devuelve un arcocoseno. parámetro: double, devuelve: double
asin(double a) | Devuelve un arcoseno. parámetro: double, devuelve: double
atan(double a) | Devuelve un arcotangente. parámetro: double, devuelve: double
atan2(double a, double b) | Devuelve un arcotangente de a/b. parámetro a: double, parámetro b: double, devuelve: double
ceil(double a) | Devuelve el entero de menor valor superior al parámetro. parámetro: double, devuelve: double
cos(double a) | Devuelve un coseno. parámetro: double, devuelve: double
E | Valor básico de logaritmos naturales. Número con coma flotante de doble precisión. 2,71828182845904523545f Nota: Use la sintaxis de Math.E.
exp(double a) | Devuelve el número exponencial e (es decir, 2,718...) elevado a la potencia de un valor doble. parámetro: double, devuelve: double
floor(double a) | Devuelve el entero de mayor valor inferior al parámetro. parámetro: double, devuelve: double
IEEEremainder(double a, double b) | Devuelve el resto cuando el parámetro a se divide por el parámetro b. parámetro a: double, parámetro b: double, devuelve: double
log(double a) | Devuelve el logaritmo natural del parámetro. parámetro: double, devuelve: double
max(a,b) | Devuelve el mayor de los dos parámetros. parámetro a: integer, parámetro b: integer, devolver: integer -o- parámetro a: long, parámetro b: long, devolver: long -o- parámetro a: float, parámetro b: float, devolver: float -o- parámetro a: double, parámetro b: double, devolver: double
min(a,b) | Devuelve el menor de los dos parámetros. parámetro a: integer, parámetro b: integer, devolver: integer -o- parámetro a: long, parámetro b: long, devolver: long -o- parámetro a: float, parámetro b: float, devolver: float -o- parámetro a: double, parámetro b: double, devolver: double
PI | Radio de circunferencia de un círculo hasta su diámetro. 3,14159265358979323846f Nota: Use la sintaxis de Math.PI.
pow(double a, double b) | Devuelve ab. parámetro a: double, parámetro b: double, devuelve: double
random() | Devuelve un número aleatorio entre 0,0 y 1,0. parámetro: none, devuelve: double Nota: La salida de esta función es un número de punto flotante entre 0 y 1.
rint(double a) | Devuelve el entero más próximo al parámetro. parámetro: double, devuelve: double
round(a) | Devuelve la longitud más próxima de un parámetro doble, y el entero más próximo de un parámetro flotante. parámetro: double, devuelve: long -o- parámetro: float, devuelve: integer
sin(double a) | Devuelve el seno del parámetro. parámetro: double, devuelve: double
sqrt(double a) | Devuelve la raíz cuadrada del parámetro. parámetro: double, devuelve: double
tan(double a) | Devuelve la tangente del parámetro. parámetro: double, devuelve: double

### Conversión de tipos

Utilice la conversión de tipos para convertir el tipo de datos. El siguiente es un ejemplo de una expresión válida, donde la variable LWORD se convierte a una variable SINT:

Tipo | Descripción
(sint) | Devuelve el valor redondeado a un entero con signo de 8 bits.
(usint) | Devuelve el valor redondeado a un entero de 8 bits sin signo.
(byte) | Devuelve el valor redondeado a un entero de 8 bits sin signo.
(int) | Devuelve el valor redondeado a un entero con signo de 16 bits.
(uint) | Devuelve el valor redondeado a un entero de 16 bits sin signo.
(word) | Devuelve el valor redondeado a un entero de 16 bits sin signo.
(dint) | Devuelve el valor redondeado a un entero con signo de 32 bits.