Hodnota (informatika) - Value (computer science)

V informatice je hodnota reprezentací nějaké entity, s níž může program manipulovat. Členy typu jsou hodnoty daného typu.

„Hodnota proměnné“ je dána odpovídajícím mapováním v prostředí . V jazycích s přiřaditelnými proměnnými je nutné rozlišovat mezi hodnotou r (nebo obsahem) a hodnotou l (nebo umístěním) proměnné.

V deklarativních (na vysoké úrovni) jazycích musí být hodnoty referenčně transparentní . To znamená, že výsledná hodnota je nezávislá na umístění výrazu potřebného k výpočtu hodnoty. Významný je pouze obsah umístění (bity, ať už jsou 1 nebo 0) a jejich interpretace.

Přiřazení: l-hodnoty a r-hodnoty

Některé jazyky používají myšlenku hodnot l a r , odvozených z typického způsobu hodnocení na levé a pravé straně příkazu o přiřazení. Hodnota l odkazuje na objekt, který přetrvává za jediným výrazem. Hodnota r je dočasná hodnota, která nepřetrvává za výrazem, který ji používá.

Pojem hodnot l a r byl zaveden pomocí Combined Programming Language (CPL). Pojmy ve vyjádření hodnoty r, l-hodnoty, a / l-hodnota R-hodnoty jsou analogické parametrů druhy vstupní parametr (má hodnotu), výstupní parametr (mohou být přiřazeny), a vstupní parametr / výstupní (má hodnotu a lze ji přiřadit), ačkoli technické detaily se liší mezi kontexty a jazyky.

R-hodnoty a adresy

V mnoha jazycích, zejména v rodině C , mají hodnoty l paměťové adresy, které jsou programově přístupné běžícímu programu (např. Prostřednictvím nějaké adresy operátoru jako „&“ v C/C ++), což znamená, že jde o proměnné nebo odkazované odkazy na určité paměťové místo. R-hodnoty mohou být l-hodnoty (viz níže) nebo ne-l-hodnoty-termín používaný pouze k odlišení od l-hodnot. Předpokládejme výraz C 4 + 9. Když je spuštěn, počítač vygeneruje celočíselnou hodnotu 13, ale protože program výslovně neurčil, kde je v počítači uloženo 13, výraz má jinou hodnotu než l. Na druhou stranu, pokud program C deklaruje proměnnou x a přiřadí hodnotu 13 až x, pak výraz xmá hodnotu 13 a je hodnotou l.

V jazyce C původně výraz l-value znamenal něco, co by bylo možné přiřadit (odtud název, což naznačuje, že je na levé straně operátoru přiřazení), ale protože constdo jazyka bylo přidáno vyhrazené slovo (konstanta), je nyní 'upravitelná hodnota l'. V C ++ 11 existuje speciální sémantický glyf &&(nezaměňovat s &&operátorem používaným pro logické operace), který označuje použití/přístup adresy výrazu pouze pro kompilátor ; tj. adresu nelze získat za běhu programu pomocí &operátoru adresa-adresy (viz použití sémantiky tahů ).

Tento typ odkazu lze použít na všechny hodnoty r včetně hodnot jiných než l i hodnot l. Některé procesory poskytují jednu nebo více instrukcí, které mají okamžitou hodnotu , někdy se jim také zkráceně říká „okamžité“. Okamžitá hodnota je uložena jako součást instrukce, která ji používá, obvykle k načtení, přidání nebo odečtení z registru. Dalšími částmi instrukce jsou operační kód a cíl. To druhé může být implicitní. (Nepřímá hodnota může být uložena v registru nebo může být uložena jinde v paměti, což vyžaduje, aby instrukce obsahovala přímou nebo nepřímou adresu [např. Adresu rejstříkového registru] na hodnotu.)

Výraz hodnoty l označuje (odkazuje) na objekt. Nemodifikovatelná hodnota l je adresovatelná, ale nelze ji přiřadit. Upravitelná hodnota l umožňuje změnu a zkoumání určeného objektu. Hodnota r je jakýkoli výraz, hodnota jiná než l je jakýkoli výraz, který není hodnotou l. Jedním příkladem je „okamžitá hodnota“ (viz níže), a proto není adresovatelná.

V jazyce sestavení

Hodnota může být prakticky jakýkoli druh dat daného datového typu , například řetězec, číslice nebo jedno písmeno.

Procesory často podporují více než jednu velikost okamžitých dat, např. 8 nebo 16 bitů, využívající pro každou variantu instrukcí jedinečný operační kód a mnemotechnické pomůcky. Pokud programátor zadá hodnotu dat, která se nevejde, vydá assembler chybovou zprávu „Mimo rozsah“. Většina assemblerů umožňuje vyjádření okamžité hodnoty jako ASCII , desítková , hexadecimální , osmičková nebo binární data. Znak ASCII 'A'je tedy stejný jako 65nebo 0x41. Pořadí bajtů řetězců se může mezi procesory lišit v závislosti na assembleru a architektuře počítače.

Poznámky

Reference

externí odkazy