値 (計算機科学)
プログラミング言語における値(あたい)について説明する。値は、何らかの式を評価した結果である。式はデータ型を持ち、評価結果は内部的にはビット列になる。データ型が異なれば、同じビット列が異なる値(意味)を持つこともある。例えばあるビット列は整数、浮動小数点数または文字列として解釈されることがある。
いくつかの種類の値はほとんどのプログラミング言語で共通してサポートされている。様々な数値表現などがその例である。一方、あまり広くサポートされていないものもある。Pascalにある集合型などがその例である。
右辺値と左辺値
[編集]Cなどのいくつかの言語には左辺値 (l-value) と右辺値 (r-value) という概念がある。左辺値はアドレスに紐付けられたもの、つまり変数かデリファレンスされた参照である。右辺値は左辺値であっても、非左辺値であってもよい。Cでは、基本的には左辺値とは代入ができるもの(=
演算子の左辺に置くことが正しいもの)という意味であるが、配列型の変数のように左辺値は持っている(アドレス演算子(単項&)でアドレスを得ることができる)が代入できないものもあり、標準化により仕様を明確化する過程で、修飾 const
が追加され、変更可能な左辺値と変更可能でない左辺値ということになった。
左辺値はあるオブジェクトを指し示す式である。変更不可能な左辺値はアドレスを持つが、代入不可能である。変更可能な左辺値は指し示すオブジェクトを変更することが可能である。右辺値はあらゆる式であり、その式を評価した結果の値を意味する。
アセンブリ言語
[編集]アセンブリ言語(というよりは機械語)のレベルでは、多くのアーキテクチャでは値は単なるビット列なので、どのようなデータ型とみなすことも本質的には自由である。タグビットなどにより機械レベルでも型のあるアーキテクチャもある。
アセンブリ言語には、値の置き方が通例2通りある。ひとつはメモリのその番地に置くべき値をそのまま指定するもので、たいていのアセンブリ言語にはそのためのアセンブラ疑似命令がある。もうひとつはイミディエイト(immediate、即値)で、機械語の命令列中に、命令にただちに引き続いて(immediately)値を置くもので、命令セットによっては値の範囲が厳しく制限されているものもある(正確には命令セットそのものではなく、その命令を具体的にビット列にエンコードする方法である、命令フォーマットによって制限される)。
関連項目
[編集]- Value object (値オブジェクト)
- イミュータブル