2011-02-20 11 views
1

ビッグエンディアンのプロセッサでテストしていませんが、これは常に最下位バイトを与えますか?最下位バイトの取得

int i = 12345678; 
unsigned char c = static_cast<unsigned char>(i); 
+1

(メタ)あなたは、私はそれはあなたがそれを行うより良いことだと思うので、私はそれを再タグ付けしませんC.として質問をマークしてはならないstatic_castを使用する場合は(あなたがタグを学びます-etiquette :-)) – xanatos

答えて

5

はい、これは常に最下位バイトを与えます。 C++仕様(§ 4.7/2)は、変換を狭めると、モジュロ2 n(nはターゲットタイプのビット数)の元の整数に一致する最小値を返すことによって、常に最上位バイトを破棄することが保証されます。

つまり、unsigned charが1バイトであるという保証はありません。保証されるのは、sizeof(char) == 1です。しかし、文字を保持できる最小のメモリ単位としてバイトを扱う場合、これはうまくいくはずです。

+0

@templatetypedef: 'unsigned char'も1バイトです。 $ 5.3.3/1 – Nawaz

+0

@Nawazを参照してくださいが、標準では保証されていません。 – user32344

+0

@ user32344:私も参照を掲載しました! – Nawaz

0

次のこともできませんか?

int i = 12345678; 
unsigned char c = (i % 256); 

または

int i = 12345678; 
unsigned char c = (i & 255); 
関連する問題