定数

  定数には,整数定数浮動小数点定数文字定数文字列定数,及び,論理型定数( C++ )の 5 種類があります.定数の場合,そのデータ型は,定数の記述方法によって一意的に決まります.

  整数定数は,以下のように,10 進数,16 進数,8 進数,または,2 進数で記述します.

10 進数: 0 以外の数字または +,- で始まる数字列(例えば,132,-34 等)
16 進数: 0x または 0X で始まる数字列(例えば,0xFD4C.なお,16 進数における a ~ f は,大文字でも小文字でも構いません)
8 進数 : 0 で始まる数字列(例えば,0734)
2 進数: 0b または 0B で始まる数字列(例えば,0x0011,-0b0011 等)(C++14)

  例えば,1234 のように書けば,整数定数とみなされ,2 または 4 バイトの領域が確保され(コンパイラによって異なる),基本的に,1.2.3.1 節で述べた整数の表現方法に従って記憶されます( int 型定数).int 型が 2 バイトで定義されており,かつ,値がその領域に入りきらないようなときは,例えば,123456789L のように,後ろに「l(エル)」または「L」(接尾子)を付加する必要があります( long 型定数).int 型が 4 バイトで定義されているような場合は,long 型と int 型は同じものになり,このようなことを考慮する必要はありません.ただし,8 バイトで定義される long long 型定数の場合は,123451234512345LL のように,「ll」または「LL」を付加する必要があります.

  1234.0 のように,小数点を使用して数値を記述すると,それは浮動小数点型定数となり,8 バイトの領域が確保され,基本的に,1.2.3.2 節で述べた浮動小数点数の表現方法に従って記憶されます( double 型定数long double 型定数の場合は,1234.0L のように,l,または,L を付加する必要がある).もし,多くの有効桁数を必要とせず,かつ,メモリを節約したい場合には,1234.0F のように,接尾子「f」または「F」を付けることにより,4 バイトの浮動小数点数で表現することも可能です( float 型定数).また,1234.0 を,1.234e+3 ( 1.234×10+3 の意味)のようにも表現可能です.

  文字定数は 'a',また,文字列定数は "abc" のように記述します.ここで注意すべきことは,'a' と "a" が同じでは無いという点です.前者は文字 a が入る 1 バイトの領域が確保されますが,後者では,2 バイトの領域が確保され,文字 a と共に,文字列の終わりであることを示す \0ヌル文字)が記憶されます.このように,文字列定数の場合,与えられた文字列の最後にヌル文字が付加され,実際の文字数より 1 文字文だけ多い領域が確保されます.従って,'漢'は文字定数として正しい表現のように見えますが,全角文字は 2 バイトで表現されますので,誤りとなります.全角文字は,たとえそれが 1 文字であっても,"漢"のように,文字列定数として記述する必要があります.なお,文字列定数を,
"abcd" "efgh"		
のように半角スペースや改行で区切って並べた場合,それらは一つの文字列(この場合は,"abcdefgh")とみなされます.

  論理型定数は true と false だけの値を持ちますが,整数の一種として処理され,0 は false,それ以外は true とみなされます.従って,Java とは異なり,論理型定数と整数定数等との加減乗除も可能です.