1.13 無符号整数の最下位の ‘1’ のビットだけを抽出する。 公開日:2021年7月28日 C++関数・テンプレート集プログラミング技術情報 次のメタ関数は、1が立っている最も下位のビットだけを残し、他のビットを0にします。 [crayon-676e025657d3e870077638/] 上のメタ関数では静的な処理しか行えませんので、通常の関数テンプレートに […] 続きを読む
1.12 最大公約数を求める。 公開日:2021年7月27日 C++関数・テンプレート集プログラミング技術情報 2整数の最大公約数を求めます。以下の条件を満たせば、必ずしも整数型でなくてもかまいません。 代入可能である <演算子が使用可能 %演算子が使用可能 [crayon-676e025658024014785362/] […] 続きを読む
1.11 整数除算 (商+剰余,C標準ライブラリ関数 div() のテンプレート版) 公開日:2021年7月26日 C++関数・テンプレート集プログラミング技術情報 同じような内容が続きますが、今回はC言語の標準ライブラリにあるdiv関数をテンプレート化したものです。 C++ではdiv関数が引数の型によって多重定義されています。しかし、返却値の型はC言語と同じで、div_t、ldiv […] 続きを読む
1.10 整数除算で端数切り下げ.(商+剰余,関数) 更新日:2021年7月26日 公開日:2021年7月25日 C++関数・テンプレート集プログラミング技術情報 前回は商の端数を切り上げましたので、今回は切り捨てることにします。 前回定義したxdiv_t構造体テンプレートを今回も使いますので再掲載しておきます。 [crayon-676e025658228772217921/] 例 […] 続きを読む
1.9 整数除算で端数切り上げ.(商+剰余) 更新日:2021年7月25日 公開日:2021年7月22日 C++関数・テンプレート集プログラミング技術情報 前回は商のみを求めましたが、今回は余りも求めることにします。 商と余りなので、標準ライブラリのdiv_t等の型を使いたいところですが、テンプレート化しにくいですし、符合無し整数型も扱えませんので、独自にクラステンプレート […] 続きを読む
1.8 整数除算で端数切り上げ.(商のみ) 更新日:2021年7月22日 公開日:2021年7月21日 C++関数・テンプレート集プログラミング技術情報 今回は整数除算の商の端数を切り上げます。+∞方向に丸めるといってもよいでしょう。 元ネタでは負の数は対象にしていませんでしたが、せっかく実装し直すのでこちらでは負の数も対象にしました。 [crayon-676e02565 […] 続きを読む
1.7 整数演算で端数四捨五入 公開日:2021年7月19日 C++関数・テンプレート集プログラミング技術情報 今回はごく普通の四捨五入です。ただし、整数除算の商を四捨五入して整数にします。 四捨五入の求め方については、JIS Z 8401:2019の規則Bがそれに該当します。せっかくですので該当部分を引用してみます。 元ネタでは […] 続きを読む
1.6 整数演算で端数を偶数丸め (最近接偶数への丸め,JIS丸め,ISO丸め) 公開日:2021年7月19日 C++関数・テンプレート集プログラミング技術情報 今回扱うのは整数除算の結果を最近接遇数丸めする方法についてです。 最近接遇数丸めというのは四捨五入に近いのですが、端数が0.5だったときに偶数方向に丸めるというものです。たとえば、1.5でも2.5でも2になりますし、3. […] 続きを読む
1.5 指定された整数型が表現可能な最小値および最大値を返す。 公開日:2021年7月18日 C++関数・テンプレート集プログラミング技術情報 整数型の表現範囲は<climits>で定義されるINT_MAXやINT_MINのようなマクロを使えば取得することができます。ところがこの方法では、型ごとに異なるマクロを使わないといけません。そのため、テンプレ […] 続きを読む
1.4 指定された整数型が「符号ビット+絶対値」か否かを判定する。 公開日:2021年7月17日 C++関数・テンプレート集プログラミング技術情報 前回、前々回に引き続き、今回は負の整数値の内部表現が符号ビットと絶対値かどうかを判定します。 これも 2 の補数表現のときと理屈は同じです。-1 の下位 2 ビットが 01 (= 1)であれば「符号ビット+絶対値」です。 […] 続きを読む