次のように、unsigned long型の整数リテラルを指定できます。
const unsigned long example = 9UL;
署名されていないcharを同様にするにはどうすればよいですか?
const unsigned char example = 9U?;
これは、コンパイラの警告を回避するために必要です。
unsigned char example2 = 0;
...
min(9U?, example2);
私が現在持っている冗長な回避策を避けて、別の行の変数で9を宣言せずにminを呼び出す行に「unsigned char」が表示されないようにしたいと思います。
min(static_cast<unsigned char>(9), example2);
Cは、幅がint
よりも小さい整数定数を指定する標準的な方法を提供していません。
ただし、_stdint.h
_は、Cで取得するのと同じように、探しているものに非常に近い処理を実行するUINT8_C()
マクロを提供します。
しかし、ほとんどの人はサフィックスを使用しない(int
定数を取得する)またはU
サフィックスを使用する(_unsigned int
_定数を取得する)だけです。 charサイズの値では問題なく機能しますが、それでも_stdint.h
_マクロから得られるものはほとんどすべてです。
C++ 11では、ユーザー定義のリテラルが導入されました。次のように使用できます。
inline constexpr unsigned char operator "" _uchar( unsigned long long arg ) noexcept
{
return static_cast< unsigned char >( arg );
}
unsigned char answer()
{
return 42;
}
int main()
{
std::cout << std::min( 42, answer() ); // Compile time error!
std::cout << std::min( 42_uchar, answer() ); // OK
}
定数をキャストできます。例えば:
min(static_cast<unsigned char>(9), example2);
コンストラクター構文を使用することもできます。
typedef unsigned char uchar;
min(uchar(9), example2);
Typedefは、すべてのコンパイラで必要なわけではありません。
Visual C++を使用していて、コンパイラ間の相互運用性が必要ない場合は、数値にi8サフィックスを使用して、符号なし8ビット定数にすることができます。
min(9ui8, example2);
'9'のような実際のchar定数ではこれを行うことはできません。
std::min
を使用していると仮定すると、実際に行う必要があるのは、min
が使用する型を明示的に指定することです。
unsigned char example2 = 0;
min<unsigned char>(9, example2);
単にconst unsigned char example = 0;
は問題ありません。
問題は、「C++でunsigned char型の整数「リテラル」を指定する方法」でした。識別子の宣言方法ではありません。
エスケープのバックスラッシュと8進数をアポストロフィで使用します。 (例: '\ 177')
8進数値は常に符号なしと見なされます。
私は考えます '\0'
は値が0のcharリテラルですが、要点もわかりません。
Unsigned char型のサフィックスはありません。整数定数はint
またはlong
(signed
またはunsigned
)であり、C99ではlong long
。値がunsigned charsの有効な範囲内にある限り、心配することなくプレーンな「U」サフィックスを使用できます。