値 (計算機科学)
情報工学において、値(あたい)とは何らかの式を評価した結果である。式はデータ型を持ち、評価結果は内部的にはビット列になる。データ型が異なれば、同じビット列が異なる値(意味)を持つこともある。例えばあるビット列は整数、浮動小数点数または文字列として解釈されることがある。
いくつかの種類の値はほとんどのプログラミング言語で共通してサポートされている。様々な数値表現などがその例である。一方、あまり広くサポートされていないものもある。Pascalにある集合型などがその例である。
右辺値と左辺値
Cなどのいくつかの言語には左辺値(l-value)と右辺値(r-value)という概念がある。左辺値はアドレスに紐付けられたもの、つまり変数かデリファレンスされた参照である。関数も、関数ポインタを取得できるので左辺値である。右辺値は左辺値であっても、非左辺値であってもよい。Cでは、そもそも左辺値とは代入ができるもの(=
演算子の左辺)という意味であったが、const
が追加されてからは、「変更可能な左辺値」という用語がこれに置き換わった。
左辺値はあるオブジェクトを指し示す式である。変更不可能な左辺値はアドレスを持つが、代入不可能である。変更可能な左辺値は指し示すオブジェクトを変更することが可能である。右辺値はあらゆる式であり、その式を評価した結果の値を意味する。
アセンブリ言語
値は単なるビット列なので、どのようなデータ型とみなすことも本質的には自由である。
アセンブリ言語には即値またはイミーディエイトと呼ばれる値がある。即値はサイズに厳格な制限があり、imm#
と書いて#ビットの即値であることを表すことがある。例えばimm8
は8ビットの即値を意味する。即値は数字(0x64
など)または文字列('A'
など)で記述されることがある。複数バイトのバイトオーダはCPUアーキテクチャによって異なる。