Saltar al contenido principal
Versión: Siguiente

Number (Real, Integer)

Número es un término genérico que significa:

  • Los campos, variables o expresiones de tipo real. El rango del tipo Real es ±1,7e±308 (13 dígitos significativos).
  • Integer variable or expression. The range for the Integer data type is -2^31..(2^31)-1 (4-byte Integer, aka Long or Longint).
Compatibilidad

Usually when working with Integers, you handle Long values (4-byte Integer). However, there are two cases where Integers are stored as Shorts values (2-byte Integer), i.e. in the range -32,768..32,767 (2^15..(2^15)-1):

  • Database fields with Integer type,
  • Elements of arrays declared with ARRAY INTEGER.

These legacy data types are automatically converted in Longs when used in the 4D Language.

Puede asignar cualquier tipo de dato numérico a otro; 4D realiza la conversión, truncando o redondeando si es necesario. Sin embargo, cuando los valores están fuera del rango, la conversión no devolverá un valor válido. You can mix number data types in expressions.

Constantes literales numéricas

Una constante literal numérica se escribe como un número real. Estos son algunos ejemplos de constantes numéricas:

27
123.76
0.0076

El separador decimal por defecto es el punto (.), independientemente del lenguaje del sistema. Si ha marcado la opción "Utilizar la configuración regional del sistema" en la página de Métodos de las Preferencias, debe utilizar el separador definido en su sistema.

Los números negativos se especifican con el signo menos (-). Por ejemplo:

-27
-123.76
-0.0076

Operadores numéricos

OperaciónSintaxisDevuelveExpressionValor
AdiciónNúmero + NúmeroNumber2 + 35
RestaNúmero - NúmeroNumber3 – 21
MultiplicaciónNúmero * NúmeroNumber5 * 210
DivisiónNúmero / NúmeroNumber5 / 22.5
División enteraNúmero \ NúmeroNumber5 \ 22
MóduloNúmero % NúmeroNumber5 % 21
ExponenciaciónNúmero ^ NúmeroNumber2 ^ 38
IgualNúmero = NúmeroBoolean10 = 10True
10 = 11False
DesigualdadNúmero # NúmeroBoolean10 #11True
10 # 10False
Mayor queNumber > NumberBoolean11 > 10True
10 > 11False
Menor queNumber < NumberBoolean10 < 11True
11 < 10False
Mayor o igual queNumber >= NumberBoolean11 >= 10True
10 >= 11False
Menor o igual queNumber <= NumberBoolean10 <= 11True
11 <= 10False

Módulo

El operador modulo % divide el primer número entre el segundo y devuelve un resto de número entero. He aquí algunos ejemplos:

  • 10 % 2 devuelve 0 porque 10 está dividido uniformemente por 2.
  • 10 % 3 devuelve 1 porque el resto es 1.
  • 10,5 % 2 devuelve 0 porque el resto no es un número entero.
atención

El operador modulo % devuelve valores significativos con números que están en el rango de los enteros largos (de –2^31 hasta 2^31 menos 1). To calculate the modulo with numbers outside of this range, use the Mod command.

División entera

El operador de división entero largo \ devuelve valores significativos sólo con números enteros.

Comparación real

To compare two reals for equality, the 4D language actually compares the absolute value of the difference with epsilon. See the SET REAL COMPARISON LEVEL command.

nota

For consistency, the 4D database engine always compares database fields of the real type using a 10^-6 value for epsilon and does not take the SET REAL COMPARISON LEVEL setting into account.

Prioridad

El orden en que se evalúa una expresión se llama prioridad. 4D tiene una precedencia estricta de izquierda a derecha, en la que no se aplica el orden algebraico. Por ejemplo:

 3+4*5

devuelve 35, porque la expresión se evalúa como 3 + 4, dando como resultado 7, que luego se multiplica por 5, con el resultado final de 35.

Para anular la precedencia de izquierda a derecha, DEBE utilizar paréntesis. Por ejemplo:

 3+(4*5)

devuelve 23 porque la expresión (4 * 5) se evalúa primero, debido a los paréntesis. El resultado es 20, que se suma a 3 para el resultado final de 23.

Los paréntesis pueden anidarse dentro de otros conjuntos de paréntesis. Asegúrese de que cada paréntesis de la izquierda tenga un paréntesis de la derecha que coincida para garantizar la evaluación correcta de las expresiones. La falta o el uso incorrecto de los paréntesis puede provocar resultados inesperados o expresiones no válidas. Además, si pretende compilar sus aplicaciones, debe tener paréntesis coincidentes: el compilador detecta la falta de paréntesis como un error de sintaxis.

Operadores de bits

The bitwise operators operates on (Long) Integers expressions or values.

If you pass a (Short) Integer or a Real value to a bitwise operator, 4D evaluates the value as a Long value before calculating the expression that uses the bitwise operator.

While using the bitwise operators, you must think about a Long value as an array of 32 bits. Los bits están numerados de 0 a 31, de derecha a izquierda.

Dado que cada bit puede ser igual a 0 o 1, también se puede pensar en un valor Entero largo como un valor en el que se pueden almacenar 32 valores booleanos. A bit equal to 1 means True and a bit equal to 0 means False.

An expression that uses a bitwise operator returns a Long value, except for the Bit Test operator, where the expression returns a Boolean value. La siguiente tabla lista los operadores a nivel de bits y su sintaxis:

OperaciónOperadorSintaxisDevuelve
Y&Long & LongLong
O (inclusive)&#124Long | LongLong
O (exclusivo)^ &#124Long ^ | LongLong
Left Bit Shift<<Long << LongLong (ver nota 1)
Right Bit Shift> >Long >> LongLong (ver nota 1)
Bit Set?+Long ?+ LongLong (ver nota 2)
Poner el bit en 0?-Long ?- LongLong (ver nota 2)
Probar bit??Long ?? Long LongBoolean (ver nota 2)

Notas

  1. For the Left Bit Shift and Right Bit Shift operations, the second operand indicates the number of positions by which the bits of the first operand will be shifted in the resulting value. Por lo tanto, este segundo operando debe estar entre 0 y 31. Tenga en cuenta, sin embargo, que el desplazamiento de 0 devuelve un valor sin cambios y el desplazamiento de más de 31 bits devuelve 0x00000000 porque todos los bits se pierden. Si se pasa otro valor como segundo operando, el resultado no es significativo.
  2. For the Bit Set, Bit Clear and Bit Test operations , the second operand indicates the number of the bit on which to act. Por lo tanto, este segundo operando debe estar entre 0 y 31; de lo contrario, el resultado de la expresión no es significativo.

La siguiente tabla lista los operadores a nivel de bits y sus efectos:

OperaciónDescripción
YCada bit resultante es el resultado de la operación AND lógica aplicada a los bits de los dos operandos. Here is the logical AND table:
  • 1 & 1 --> 1
  • 0 & 1 --> 0
  • 1 & 0 --> 0
  • 0 & 0 --> 0
  • In other words, the resulting bit is 1 if the two operand bits are 1; otherwise the resulting bit is 0.
    O (inclusive)Each resulting bit is the logical OR of the bits in the two operands.Here is the logical OR table:
  • 1 | 1 --> 1
  • 0 | 1 --> 1
  • 1 | 0 --> 1
  • 0 | 0 --> 0
  • In other words, the resulting bit is 1 if at least one of the two operand bits is 1; otherwise the resulting bit is 0.
    O (exclusivo)Each resulting bit is the logical XOR of the bits in the two operands.Here is the logical XOR table:
  • 1 ^ | 1 --> 0
  • 0 ^ | 1 --> 1
  • 1 ^ | 0 --> 1
  • 0 ^ | 0 --> 0
  • In other words, the resulting bit is 1 if only one of the two operand bits is 1; otherwise the resulting bit is 0.
    Left Bit ShiftEl valor resultante se ajusta al valor del primer operando, luego los bits resultantes se desplazan a la izquierda el número de posiciones indicado por el segundo operando. Los bits de la izquierda se pierden y los nuevos bits de la derecha se ponen en 0. Note: Taking into account only positive values, shifting to the left by N bits is the same as multiplying by 2^N.
    Right Bit ShiftEl valor resultante se ajusta al valor del primer operando, luego los bits resultantes se desplazan a la derecha el número de posición indicado por el segundo operando. The bits on the right are lost and the new bits on the left are set to 0.Note: Taking into account only positive values, shifting to the right by N bits is the same as dividing by 2^N.
    Bit SetEl valor resultante se establece en el valor del primer operando, luego el bit resultante, cuyo número es indicado por el segundo operando, se coloca en 1. Los demás bits no se modifican.
    Poner el bit en 0El valor resultante se establece en el valor del primer operando, luego el bit resultante, cuyo número es indicado por el segundo operando, se coloca en 0. Los demás bits no se modifican.
    Probar bitDevuelve True si, en el primer operando, el bit cuyo número indica el segundo operando es igual a 1. Devuelve False si, en el primer operando, el bit cuyo número indica el segundo operando es igual a 0.

    Ejemplos

    OperaciónEjemploResult
    Y0x0000FFFF & 0xFF00FF000x0000FF00
    O (inclusive)0x0000FFFF | 0xFF00FF000xFF00FFFF
    O (exclusivo)0x0000FFFF ^ | 0xFF00FF000xFF0000FF
    Left Bit Shift0x0000FFFF << 80x00FFFF00
    Right Bit Shift0x0000FFFF >> 80x000000FF
    Bit Set0x00000000 ?+ 160x00010000
    Poner el bit en 00x00010000 ?- 160x00000000
    Probar bit0x00010000 ?? 16 16True