0

32ビット整数(実際には charsを表しますが、何でも)で一口演算を行う必要があります。

次のようなコードは安全ですか?

uint32_t input;
input = ...;

if(input & 0x03000000) {
    output  = 0x40000000;
    output |= (input & 0xFC000000) >> 2;

つまり、「if」ステートメントでは、左側の uint32_t と右側でビットごとの操作を行っています...わかりません!

ハードコーディングされた "0x03000000" のタイプとサイズ (つまり、保存されているバイト数) を知っていますか?

一部のシステムが 0x03000000 を int と見なし、2 バイトだけでコーディングする可能性はありますか?

4

1 に答える 1

1

次のようなコードは安全ですか?

はい、そうです。

ハードコーディングされた "0x03000000" のタイプとサイズ (つまり、保存されているバイト数) を知っていますか?

0x03000000int搭載されたシステム上に32-bit intあり、 が搭載longされたシステム上にあり16-bit intます。

(uint32_tここにあるように、 と の 2 の補数を仮定します。また、とCHAR_BIT8含むシステムは知りません。)16-bit int64-bit long

一部のシステムが 0x03000000 を int と見なし、2 バイトだけでコーディングする可能性はありますか?

上記の16-bit intシステムで0x03000000は、 islongおよび isを参照してください32-bit。C の 16 進定数は、それを表現できる最初の型です: int, unsigned int, long, unsigned long, long long,unsigned long long

于 2013-06-29T11:29:56.473 に答える