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