2011-02-05 1 views
2

intからcharへの型キャスト時に、使用するバイト数を4から1に減らしています。どのバイトを使用してcharを作るのですか?Cの文字に型キャストするとき、文字を作るためにどのバイトが使用されますか?

最上位バイトを使用しますか?

それは最も重要ではありませんか?

私は知っておくべき何らかの規則がありますか?

+0

これは未定義の動作ですが、私の言葉を取っていないと思います。もちろん – Falmarri

+3

LSB。エンディアンは重要ではありません。 –

答えて

5

Cは、ナローイング変換を実行するときに最下位バイトを使用します。したがって、整数値0xCAFEBABEを持っていて、それをcharに変換すると、値0xBEが得られます。

もちろん、intが4バイトであること、またはcharが1であるという保証はありませんが、切り捨てを行うロジックが常に同じで、高次ビットはcharに収まらない。

+0

ありがとう!私はできるだけ早く答えを受け入れるでしょう:0) – Matt

+0

文字の型ではなく、整数型の中で最小のものとして 'char'を考えてみましょう。 'int'から' short'( 'sizeof(int)> sizeof(short)'と仮定します)にキャストすると、もちろん値の下位ビットが使用されます。同じことが 'char'へのキャストにも当てはまります。 – zwol

+1

新しい型で値を表現できない場合は、符号付き変換を狭める際に実装が自由に信号を発生させることに注意してください。しかし、unsigned convversionsは常によく定義されています... – Christoph

2

charが署名されている場合、元の値が既にcharの値の範囲に収まらない限り、実装定義です。実装が合わない場合、ナンセンスを生成する(または信号を発生させる)ことは完全に自由です。 charが符号なし(規格で許される)の場合、値はモジュロ1<<CHAR_BIT(通常は256)になります。

関連する問題