プロが教える店舗&オフィスのセキュリティ対策術

short int 型をunsigned char型に変換する方法をおしえてください

A 回答 (3件)

完全に変換する方法はありません。



最近主流の32bit用C言語では、shortは16bit、unsigned charは8bitが使われています。
Cの規格に照しあわせても、shortはchar以上のビット数であることが決められています。「以上」なので同じビット数でもいいのですが、多くの処理系ではcharより大きいと考えた方がよいでしょう。

また、shortには負の値がありますが、unsigned charには負の値はありません。

以上から、shortで表現できる値には、unsigned charでは表現できない値が存在することになります。
そのため、値の取り得る範囲であるとか、足りない精度をどう補うとかいった条件が付きます。


また、これとは別に、ファイル等への入出力で、16bit整数を2バイトで対応するケースがあります。

あなたがやりたい変換はどちらなのでしょうか?
    • good
    • 0

単にキャストするだけです。



short int x = -123;
(unsigned char)x;

あるいは、unsigned char型の変数に代入するような場合は、暗黙的に変換されます。


short int x = -123;
unsigned char y;
y = x;

符号付き整数型から符号無し整数型に変換する場合、変換前の値を変換後の型で表現できない場合は、変換後の型の最大値+1を法とする剰余になります。
    • good
    • 0

変換できない値の場合にどうしたいのかでやり方が変わります。


汎用的には変換できません例外として報告するようにするのかな。
変換元のshort intで値が0~255の時は問題なく変換できますが、他の場合にはどう処理するかを決める必要があります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!