bitとbyte
1bit…情報の最小単位
1byte = 8bit
int型…4byte long long型…8byte
実数型の誤差について
3.141592653589793238を例にとると、次の桁数までは誤差がないことが保証される(はず)。
| 型 | 値 |
|---|---|
| int | 3 |
| float | 3.14159 |
| double | 3.14159265358979 |
有効桁数を指定して実数の値を出力する
C言語で値を出力するとき、printf()関数を使用しますが、競技プログラミングでは、例えば書式制御文字「%lf」を記述するだけでは、出力桁数が足りず、正答との誤差が大きくなってしまい、不正解として扱われてしまうことがあります。
そこで、例えば小数点よりも右に最低でも5桁は値を出力するには、次のようにします。
double n = 3.141592
printf("%.5lf\n", n); //「3.14159」と出力される書式制御文字の「%」と「lf」の間に「.n」の形式で「小数点よりも右にn桁は出力すること」を指定します。
[補足①]
「%n.mlf」の形式で指定すると、以下の2つの条件が指定されます。
- 小数点よりも右にm桁は出力すること
- 小数点も含めた値の全体の桁数がn桁以上となること
[補足②]
これと同じような方法で、値を必ずn桁で出力し、桁数が足りない場合は0埋めするようにすることもできます。
int a = 7;
printf("%02d\n", a); //「07」と出力される複合代入演算子
前回、紹介した「算術演算子」を見て気づくことはないでしょうか。
int a = 12, b = 27;
a = a + b;「a」を2回記述するのが面倒ですよね。そこで、「複合代入演算子」というものがあります。
これは、算術と代入を同時に行うものです。
| 記号 | 意味 | 使用例 |
|---|---|---|
| += | 加算(足し算)の結果を代入する | a += b; |
| -= | 減算(引き算)の結果を代入する | a -= b; |
| *= | 乗算(掛け算)の結果を代入する | a *= b; |
| /= | 除算(割り算)の結果を代入する | a /= b; |
| %= | 余剰(余り)の結果を代入する | a %= b; |
例えば、「a += b」は、「a = a + b」と同じ意味となります。
インクリメント演算子とデクリメント演算子
更に、変数の値を1増やしたり、1減らしたりするだけの演算子もあります。
| 名称 | 使用例 |
|---|---|
| インクリメント演算子 | i++; |
| インクリメント演算子 | ++i; |
| デクリメント演算子 | i–; |
| デクリメント演算子 | –i; |
インクリメント演算子とデクリメント演算子は、変数名の前に記述する方法と、後に記述する方法があります。
この演算子を単体で使うだけでは動作に違いはありませんが、代入を行うと動作に違いが表れてしまうため、代入式には使用しません。
[補足]
「a = b++;」とすると、bの値をaに代入してから、bに1を足します。
「a = ++b;」とすると、bの値に1を足してから、aにbの値を代入します。
