前回に引き続き、今度は1の補数表現かどうかを判定するメタ関数を作っています。

2の補数表現のときと理屈は同じです。-1の下位2ビットが10 (= 2)であれば1の補数表現です。

前回同様、C++14以降であれば、次のようにしておけば多少は使い勝手がよくなります。

現実には負の整数値の内部表現が1の補数の処理系に遭遇することはほとんどありません。また、C++20からは2の補数が使われることが規定されましたので、今回のメタ関数は必ずfalseを返すことになるでしょう。


元ネタ

↑ 1. 整数型に関するテンプレート