前回に引き続き、今度は1の補数表現かどうかを判定するメタ関数を作っています。
2の補数表現のときと理屈は同じです。-1の下位2ビットが10 (= 2)であれば1の補数表現です。
| 0 1 2 3 4 5 6 | template<class T> struct is_1s_complement {   static const bool value = (T(-1) & 3) == 2; }; | 
前回同様、C++14以降であれば、次のようにしておけば多少は使い勝手がよくなります。
| 0 1 2 3 | template <class T> constexpr bool is_1s_complement_v = is_1s_complement<T>::value; | 
現実には負の整数値の内部表現が1の補数の処理系に遭遇することはほとんどありません。また、C++20からは2の補数が使われることが規定されましたので、今回のメタ関数は必ずfalseを返すことになるでしょう。






