Charを正の値として出力しようとしています:
char ch = 212;
printf("%u", ch);
しかし、私は得る:
4294967252
出力で212
を取得するにはどうすればよいですか?
ch
として宣言します
unsigned char ch = 212 ;
そして、printfは動作します。
このコードには2つのバグがあります。まず、署名付きchar
を使用するほとんどのC実装では、212が8ビットの署名付きchar
に適合しないため、char ch = 212
にオーバーフローがあり、C標準は次の場合の動作を定義しません整数オーバーフローがあります。代わりに:
unsigned char ch = 212;
次に、printf("%u",ch)
で、ch
が通常のC実装でint
に昇格されます。ただし、%u
指定子はunsigned int
を想定しており、C標準は、間違った型が渡されたときの動作を定義しません。代わりに:
printf("%u", (unsigned) ch);
char
はデフォルトでsigned
が宣言されているため、変数の範囲は
-127から+127>
あなたの価値があふれています。目的の値を取得するには、unsigned
修飾子を宣言する必要があります。修飾子の(unsigned
)範囲は次のとおりです。
0 to 255
任意のデータ型の範囲を取得するには、プロセス2^bit
の例char
isは8ビット長で、範囲を取得するには2 ^(power) 8
だけです。
Charの範囲は127〜-128です。 212を割り当てると、chは212ではなく-44(212-128-128)を保存するため、負の数を符号なしとして出力しようとすると、(unsigned intの最大値)-abs(number)が得られます=この場合、4294967252
したがって、212をchのまま保存したい場合は、chを次のように宣言するだけです。
unsigned char ch;
現在、chの範囲は0〜255です。
何らかの理由で宣言を変更できない場合は、次のことができます。
char ch = 212;
printf("%d", (unsigned char) ch);