e や E を使って指数表現した場合も実数を表す定数になります。 1e23 は 1×1023、0.25e-31 は 0.25×10-31を表します。1.0 3.1415926535 1000.2 0.5 .3
1.45e12 -3.77e45 12e-34
float は、 に続く名前が実数を格納する変数であることを宣言します。 この例では sum は float型変数と呼ばれます。float sum; /* 合計 */
float 型の変数の有効数字は約7桁です。 より精度の高い計算を行う必要がある場合には、 double(倍精度)型を使います。 double 型の有効数字は約16桁です。
さらに高精度な計算を行うために、 long double 型と呼ばれる データ型を用意している処理系もあります。double accurate;
データ型 変換指定子 float %f double %lf long double %Lf
本当のことを言うと実数型の定数のデータ型は double なので、 ここでは %lf を使用すべきなのですが、 float 型のデータは普通 printf には double に変換されてから渡されるので (つまり、printf では %f と %lf は同じ)、 %f でも正常に表示できます。printf("1割る3は%f\n", 1.0 / 3.0);
この例では整数の定数 3 を実数 (3.0) に直して計算します。1.0 / 3
これは整数同士の演算なので、切り捨てられて結果は 0 になります。1 / 3
実数型の変数への整数の代入は、 整数を実数に直して行われます。
x には 10.0 が入ります。int i; float x; i = 10; x = i;
整数型の変数への実数の代入は、 実数の小数部を切り捨てた後、 それを整数に直して行われます。
i には 2 が入ります。int i; i = 7.0 / 3.0;
char は、後ろに続く名前が文字を格納する変数であることを宣言します。 この場合 one は char 型変数と呼ばれます。char one; /* 1文字 */
文字の定数は1文字を '…' ではさんだもので、「文字リテラル」と呼ばれます。 なお文字リテラルのデータ型は int です。
これらは左から大文字の A、小文字の a、数字の 0、空白、コンマを示します。 '…' の間に2文字以上をはさむことはできません。 日本語用の文字は2文字とみなされるので、 文字型の定数には使えません。 "…" ではさんだものは文字型の定数ではありません (文字列定数と呼び、別のものです)。'A' 'a' '0' ' ' ','
改行 (\n) のような特殊文字は、 1文字として扱われます。
' や " や \ という文字自体を表したいときは、 いずれも \ を左に置いて、 その文字が持つ特殊な意味を取り消す(エスケープする)必要があります。
'\b' バックスペース (カーソルを1文字左へ移動) '\f' フォームフィード (改ページ) '\n' 改行 (次の行に移動) '\r' 復帰 (現在の行の先頭に移動) '\t' タブ (次のタブストップに移動)
printf で文字を表示するには、変換指定子として %c を使います。'\'' '\"' '\\'
printf("これは %c という文字です", 'A');
'A' の文字コード 65 が出力されます。printf("%d\n", 'A');
'A' が出力されます。printf("%c\n", 65);
'B' が出力されます。printf("%c\n", 'A' + 1);
文字定数において、 \ の後に文字コードを表す3桁以下の8進数を置けば、 前述の方法で表すことのできない特殊な文字を表現することができます。
これらは左から '\n'、'A'、文字コード 0 の文字を表します。 文字コード 0 の文字は整数の 0 と等価です。'\012' '\101' '\0'
データ型 説明 値の範囲 char 文字型 -128〜127 short 短精度整数型 -32768〜32767 long 長精度整数型 -2147483648〜2147483647
修飾子 説明 signed 符号付き整数 unsigned 符号なし整数
各データ型の printf における変換指定子は、 それぞれ次のようになります。
なお char/unsigned char は、 それぞれ int/unsigned int に変換して printf の引数に渡されるので、 これを整数として(文字ではなく)出力する場合は、 それそれ %d/%u を使います。
データ型 変換指定子 short %hd unsigned short %hu int %d unsigned int %u long %ld unsigned long %lu