Jump to content

Ценность (информатика)

(Перенаправлено из Value (программирование) )

В информатике и программировании значение это представление некоторой сущности, которой может манипулировать программа. Членами типа являются значения этого типа. [1]

«Значение переменной» задается соответствующим отображением в среде . [2] В языках с назначаемыми переменными становится необходимым различать r-значение (или содержимое) и l-значение (или местоположение) переменной. [3]

В декларативных (высокоуровневых) языках значения должны быть ссылочно прозрачными . Это означает, что результирующее значение не зависит от местоположения выражения, необходимого для вычисления значения. Значимы только содержимое ячейки (биты, равные они 1 или 0) и их интерпретация. [ нужна ссылка ]

Категория значения

[ редактировать ]

Несмотря на свое название, в стандартах языка C++ эта терминология используется для категоризации выражений, а не значений. [4] : 8.2.1 

Задание: l-значения и r-значения

[ редактировать ]

В некоторых языках используется идея l-значений и r-значений , происходящая из типичного способа вычисления в левой и правой части оператора присваивания. L-значение относится к объекту, который сохраняется за пределами одного выражения. R-значение — это временное значение, которое не сохраняется за пределами выражения, в котором оно используется. [5]

Понятие l-значений и r-значений было введено в Комбинированном языке программирования (CPL). Понятия в выражении r-значения, l-значения и r-значения/l-значения аналогичны режимам параметров входного параметра (имеет значение), выходного параметра (может быть назначен) и входного/выходного параметра. (имеет значение и может быть присвоено), хотя технические детали различаются в зависимости от контекста и языка.

R-значения и адреса

[ редактировать ]

Во многих языках, особенно в семействе C , l-значения имеют адреса хранения , которые программно доступны для работающей программы (например, через какой-либо оператор адреса, такой как «&» в C/C++), что означает, что они являются переменными или детерминантами. ссылочные ссылки на определенную ячейку памяти. R-значения могут быть l-значениями (см. ниже) или не-l-значениями — этот термин используется только для отличия от l-значений. Рассмотрим выражение C 4 + 9. При выполнении компьютер генерирует целое число 13, но поскольку программа явно не указала, где в компьютере хранится это число 13, выражение не является l-значением. С другой стороны, если программа на языке C объявляет переменную x и присваивает переменной x значение 13, то выражение x имеет значение 13 и является l-значением.

В C термин l-значение первоначально означал что-то, чему можно было присвоить (отсюда и название, указывающее на то, что оно находится слева от оператора присваивания), но поскольку зарезервированное слово const (константа) был добавлен в язык, теперь термин «изменяемое l-значение». В C++11 специальный семантический глиф && существует (не путать с && оператор, используемый для логических операций), чтобы обозначить использование/доступ к адресу выражения для компилятора только ; т. е. адрес не может быть получен с помощью адреса-из & оператор во время выполнения программы (см. использование семантики перемещения ). Добавление семантики перемещения усложнило таксономию классификации значений, добавив к ней концепцию xvalue (значение с истекающим сроком действия), которое относится к объекту, срок службы которого приближается к концу, ресурсы которого можно использовать повторно (обычно путем их перемещения). Это также привело к созданию категорий glvalue (обобщенное lvalue), которые представляют собой lvalue и xvalues, и prvalues ​​(чистые rvalues), которые представляют собой rvalues, не являющиеся xvalues. [6]

Этот тип ссылки может применяться ко всем r-значениям, включая не-l-значения, а также l-значения. Некоторые процессоры предоставляют одну или несколько инструкций, которые принимают немедленное значение , иногда для краткости называемое «немедленным». Непосредственное значение сохраняется как часть инструкции, которая его использует, обычно для загрузки в регистр, добавления или вычитания из него. Другими частями инструкции являются код операции и пункт назначения. Последнее может быть неявным. (Непрямое значение может находиться в регистре или храниться в другом месте памяти, что требует, чтобы инструкция содержала прямой или косвенный адрес [например, адрес индексного регистра] значения.)

Выражение l-значения обозначает объект (ссылается на него). Неизменяемое значение l адресно, но не назначаемо. Изменяемое значение l позволяет не только исследовать обозначенный объект, но и изменять его. Значение r — это любое выражение, значение, отличное от l, — это любое выражение, которое не является значением l. Одним из примеров является «непосредственное значение» (см. выше), которое, следовательно, не адресуется.

На языке ассемблера

[ редактировать ]

Значением может быть практически любой тип данных заданного типа , например строка, цифра или одна буква.

Процессоры часто поддерживают более одного размера непосредственных данных, например 8 или 16 бит, используя уникальный код операции и мнемонику для каждого варианта инструкции. Если программист предоставляет значение данных, которое не подходит, ассемблер выдает сообщение об ошибке «Вне диапазона». Большинство ассемблеров позволяют выражать непосредственное значение в виде ASCII , десятичных , шестнадцатеричных , восьмеричных или двоичных данных. Таким образом, символ ASCII 'A' то же самое, что 65 или 0x41. Порядок байтов строк может различаться на разных процессорах в зависимости от ассемблера и архитектуры компьютера.

Примечания

[ редактировать ]
  1. ^ Митчелл 1996 , с. 9.
  2. ^ Ахо, Альфред В.; Лам, Моника С.; Сетхи, Рави; Уллман, Джеффри Д. (1986). Составители: принципы, методы и инструменты . Издательство Аддисон-Уэсли. ISBN  0-201-10088-6 .
  3. ^ Митчелл 1996 , стр. 389–390.
  4. ^ «ISO/IEC 14882:2017 Языки программирования — C++» . 2017.
  5. ^ «Lvalues ​​и Rvalues ​​(Visual C++)» . Сеть разработчиков Microsoft . Проверено 3 сентября 2016 г.
  6. ^ Уильям М. Миллер. «Таксономия категорий значений выражений» (PDF) .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 4bb4b2ae9e389016b95d06cafe1be874__1721354160
URL1:https://arc.ask3.ru/arc/aa/4b/74/4bb4b2ae9e389016b95d06cafe1be874.html
Заголовок, (Title) документа по адресу, URL1:
Value (computer science) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)