1

誰かがこのステートメントを疑似コード (または単純な英語) に翻訳できますか?

var c:uint = 0xFF << 24 | r << 16 | g << 8 | b;
4

3 に答える 3

6

これは、4 バイト ワードで異なるバイトを設定しています。<< は、指定されたビット数だけ左にシフトするため<< 24、3 バイト、<< 81 バイトなどシフトします。

0xFF000000         0xFF << 24
0x00rr0000         r << 16
0x0000gg00         g << 8
0x000000bb         b

次のような最終的な答えを出すには

0xFFrrggbb

変数名を考えると、これはおそらく 32 ビットの色の値で、赤、緑、青にそれぞれ 1 バイトずつ割り当てられています。4 番目のコンポーネントは、透明度、Z 値 (深さ)、または他の場所で必要になった場合に備えて予備のビットにすることができます。;-)

于 2010-05-01T19:09:50.160 に答える
2

c変数に格納されている 8 ビット チャネル値から複合 32 ビット カラー値r, g, bを (すべて 1) のアルファ チャネル値0xFF、つまり完全に不透明に作成しているように見えます。

基本的に、個々の値0xFF, r, g, bが適切な量 (24、16、8、および 0) だけシフトされ、OR 演算されて結合され、単一の符号なし整数変数に格納されます。

于 2010-05-01T19:09:43.500 に答える
1

4 バイトの値を取り、32 ビットの符号なし整数にまとめます。

シフト演算子<<は、値を特定のビット位置に移動するために使用されます。

0xFF << 24 は、値 0xFF000000 を作成します。

r << 16 は、r 値を次の 8 ビット 0x00rr0000 に配置します。

等々。それらを一緒に OR すると、値 0xFFrrggbb が作成されます。

この操作の理由は、アルファ、赤、緑、および青のコンポーネントを 32 ビットのカラー値にまとめる可能性が最も高いためです。

于 2010-05-01T19:11:26.627 に答える