C++に組み込まれている数値型は、整数と浮動小数点数の2種類に分けられます。
整数は、0や691、-2のように小数点を含まない数です。
浮動小数点数は、6.02214076や0.1、-1.616のように小数点を含む数です。
次の例では、4つの異なる変数の宣言と初期化を行っています。
int m_morales{9241}; // base 10: 0-9
int a_apaec{0x24CD}; // base 16: 0-9 and A-F
int m_gargan{0b10010000011001}; // base 2: 0-1
int b_reilly{022031}; // base 8: 0-7
// Leading with a 0 not the letter o.
int型の変数に値を代入するときは、リテラルを直接書くことができます。
リテラルとは、9241のようにコードに直接書き込まれた数値のことです。
整数リテラルには、表現の基数に応じてさまざまな書き方があります。
10進数の整数リテラルがもっとも一般的で、0から9の数字を使います。
0xのような特別な接頭辞を付けると、ほかの基数も使えます。
上の例では、数値9241を4つの表現と接頭辞で示しています。
どの変数も、同じ値に初期化されています。
それぞれの表現方法の詳細については、小さなチュートリアルを見てみましょう。
読みやすくするために、アポストロフィで桁を区切ることができます。
9'241は、0b0100'100'0001'1001や92'4'1と同じです。
浮動小数点リテラルには2つの書き方があります。
直感的な0.0024のほかに、その科学的表記である2.4e-3も使えます。
もっともよく使われる浮動小数点型はdoubleです。
C++では、式を組み立てるために+、-、*、/、(、)、%が使えます。
整数同士の演算結果も整数になります。
5 / 2は2を返します。
関わる型の一方が浮動小数点型であれば、結果も浮動小数点数になります。
5.0 / 2と5 / 2.0は2.5を返します。
%は余りを求める演算子で、整数の除算の余りを返します。5%3は2です。
代入演算子は、変数にリテラルを代入します。 常に右から左へ行われ、その逆にはなりません。
int length = 5;
int width = 2;
length = width;
ここでは、整数値5が変数lengthに代入されます。
次に、整数値2が変数widthに代入されます。
最後に、widthの値が変数lengthにコピーされ、それまでの値5は失われます。
また、代入が行われる瞬間にwidthの値がlengthに代入されるだけだという点にも注意してください。
そのため、あとからwidthの値が変わっても、lengthの値には影響しません。
代入演算子は、算術演算子やビット演算子などのほかの演算子と組み合わせることができ、これらはcompound assignment演算子(+=、-=、*=、/=、%=)として知られています。
これらの演算子は、変数の現在の値に演算を行って値を変更します。
// we start with 0 people
int people{};
// we need 0 eggs
int eggs{};
// two people joined:
people += 2;
// people is now 2
// let's add 3 eggs per person
eggs += 3 * people;
// eggs is now 6
変数peopleとeggsは0に初期化されています。
次に、変数peopleの現在の値0に整数値2を足し、その結果をpeopleに代入し直します。
peopleは2になります。
続いて、1人につき3個の卵を足すと、合計6個になります。
この6を変数eggsの現在の値0に足し、eggsに代入し直します。
eggsは6になります。
これと等価な式は、people = people + 2とeggs = eggs + (3 * people)です。
この演習では、フリーランサーがプロジェクトマネージャーとやり取りするのを助けるコードを書きます。目的は、日額と月額をすばやく計算するためのいくつかのユーティリティを用意することです。割引が指定されていれば、それも適用できます。
まず、フリーランサーとプロジェクトマネージャーの間で、いくつかのルールを定めておきます。
ときには、フリーランサーが日額に割引を適用することもあります(たとえば、最も忠実な顧客や非営利の顧客に対してなど)。
割引は、割合を表す小数として扱います。たとえば25.0(25%)です。
daily_rateという関数を実装して、時給を入力として受け取り、日額を計算しましょう。
契約では、1日は請求可能な8時間と定められています。
daily_rate(60)
// => 480.0
戻り値となる日額は、double型にしてください。
apply_discountという関数を実装して、割引後の価格を計算しましょう。
この関数は、元の価格とパーセントで表した割引率という2つの入力を受け取ります。
apply_discount(150, 10)
// => 135.0
戻り値は必ずdouble型とし、一切丸めないでください。
monthly_rate関数を実装して、割引後の月額を計算しましょう。
この関数は、時給とパーセントで表した割引率という2つの入力を持ちます。
monthly_rate(77, 10.5)
// => 12130
戻り値となる月額は、最も近い整数に切り上げてください(天井関数を取ります)。
days_in_budgetという関数を実装しましょう。この関数は予算・時給・割引を受け取り、何日分の仕事をまかなえるかを計算します。
days_in_budget(20'000, 80, 11.0)
// => 35
戻り値となる日数は、次の整数に切り下げてください(床関数を取ります)。