Valor (informática)

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar
Expresión en ciencias informáticas que no pueden evaluarse más

En informática y programación de software, un valor es la representación de alguna entidad que puede ser manipulada por un programa. Los miembros de un tipo son los valores de ese tipo.

El "valor de una variable" viene dado por el mapeo correspondiente en el entorno. En lenguajes con variables asignables, se vuelve necesario distinguir entre el valor-r (o contenidos) y el valor-l (o ubicación) de una variable.

En lenguajes declarativos (de alto nivel), los valores tienen que ser referencialmente transparentes. Esto significa que el valor resultante es independiente de la ubicación de la expresión necesaria para calcular el valor. Solo los contenidos de la ubicación (los bits, ya sean 1 o 0) y su interpretación son significativos.

Categoría de valor

A pesar de su nombre, en los estándares del lenguaje C++ esta terminología se usa para categorizar expresiones, no valores.

Tarea: valores l y valores r

Algunos lenguajes usan la idea de valores l y valores r, derivados del modo típico de evaluación en el lado izquierdo y derecho de una instrucción de asignación. Un valor l se refiere a un objeto que persiste más allá de una sola expresión. Un valor r es un valor temporal que no persiste más allá de la expresión que lo usa.

La noción de valores l y valores r fue introducida por el lenguaje de programación combinado (CPL). Las nociones en una expresión de valor r, valor l y valor r/valor l son análogas a los modos de parámetro de parámetro de entrada (tiene un valor), parámetro de salida (se puede asignar) y parámetro de entrada/salida (tiene un valor y se puede asignar), aunque los detalles técnicos difieren entre contextos e idiomas.

Valores R y direcciones

En muchos lenguajes, especialmente en la familia C, los valores l tienen direcciones de almacenamiento que son accesibles mediante programación para el programa en ejecución (por ejemplo, a través de algún operador de dirección como "&" en C/C++), lo que significa que son variables o referencias desreferenciadas a una determinada ubicación de memoria. Los valores R pueden ser valores l (ver más abajo) o no valores l, un término que solo se usa para distinguir los valores l. Considere la expresión C 4 + 9. Cuando se ejecuta, la computadora genera un valor entero de 13, pero debido a que el programa no ha designado explícitamente en qué parte de la computadora se almacena este 13, la expresión no es un valor l. Por otro lado, si un programa en C declara una variable x y asigna el valor de 13 a x, entonces la expresión x tiene un valor de 13 y es un valor l.

En C, el término valor l originalmente significaba algo a lo que se podía asignar (de ahí el nombre, que indica que está en el lado izquierdo del operador de asignación), pero dado que la palabra reservada const (constante) se agregó al idioma, el término ahora es 'modificable valor l'. En C++11, un glifo semántico especial && existe (que no debe confundirse con el operador && utilizado para operaciones lógicas), para indicar el uso/acceso de la dirección de la expresión para compiladorsolo; es decir, la dirección no se puede recuperar usando la dirección de & durante el tiempo de ejecución del programa (ver el uso de la semántica de movimiento). La adición de la semántica de movimiento complicó la taxonomía de clasificación de valores al agregarle el concepto de un valor x (valor que expira) que se refiere a un objeto cerca del final de su vida útil cuyos recursos se pueden reutilizar (generalmente moviéndolos). Esto también condujo a la creación de las categorías glvalue (valor l generalizado) que son valores l y valores x y prvalues (valores r puros) que son valores r que no son valores x.

Este tipo de referencia se puede aplicar a todos los valores r, incluidos los valores que no son l y los valores l. Algunos procesadores proporcionan una o más instrucciones que toman un valor inmediato, a veces denominado "inmediato" para abreviar. Un valor inmediato se almacena como parte de la instrucción que lo emplea, generalmente para cargar, sumar o restar de un registro. Las otras partes de la instrucción son el código de operación y el destino. Esto último puede estar implícito. (Un valor no inmediato puede residir en un registro o almacenarse en otro lugar de la memoria, lo que requiere que la instrucción contenga una dirección directa o indirecta [por ejemplo, dirección de registro de índice] para el valor).

La expresión del valor l designa (se refiere a) un objeto. Un valor l no modificable es direccionable, pero no asignable. Un valor l modificable permite cambiar y examinar el objeto designado. Un valor r es cualquier expresión, un valor que no es l es cualquier expresión que no es un valor l. Un ejemplo es un "valor inmediato" (ver arriba) y, en consecuencia, no direccionable.

En lenguaje ensamblador

Un valor puede ser prácticamente cualquier tipo de datos por un tipo de datos dado, por ejemplo, una cadena, un dígito, una sola letra.

Los procesadores suelen admitir más de un tamaño de datos inmediatos, p. 8 o 16 bits, empleando un código de operación único y mnemotécnico para cada variante de instrucción. Si un programador proporciona un valor de datos que no encaja, el ensamblador emite un mensaje "Fuera de rango" mensaje de error. La mayoría de los ensambladores permiten expresar un valor inmediato como datos ASCII, decimales, hexadecimales, octales o binarios. Por lo tanto, el carácter ASCII 'A' es lo mismo que 65 o 0x41. El orden de bytes de las cadenas puede diferir entre procesadores, según el ensamblador y la arquitectura de la computadora.

Contenido relacionado

Exploración de graham

El escaneo de Graham es un método para encontrar el casco convexo de un conjunto finito de puntos en el plano con complejidad temporal O(n log n). Lleva el...

Ejecución especulativa

La ejecución especulativa es una técnica de optimización en la que un sistema informático realiza alguna tarea que puede no ser necesaria. El trabajo se...

Interfaz de nivel de llamada

La interfaz de nivel de llamada es una interfaz de programación de aplicaciones y un estándar de software para incrustar código de lenguaje de consulta...
Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save