INTEGER(0..2 ** 24 - 1)はuint32_t&0xFFFFFFですか?

INTEGER(0 ... 2 24 - 1)の値を持つ型の変数が見つかりました。コードを作成した人が、uint32_t varのタイプの変数を入れることにしました。これの結果を0xFFFFFFで置きます

how does this uint32_t & OxFFFFFF is able to handle the value of INTEGER (0...224 - 1) ?

As I understand, with masking 0xFFFFFF you make the value to be all positive (or?) but how does this thing work, I think I miss a concept here.

0
INTEGER(0 ... 2(24) - 1))とは何を意味しますか?
追加された 著者 Armen Tsirunyan,
あなたが話している言語を言うなら、それは助けになるでしょう...
追加された 著者 Jon Skeet,
@ JonSkeet:そのC言語で
追加された 著者 heike,
@アーメンTsirunyan:それは0までの値を持っています((2から24へのマイナス1)
追加された 著者 heike,
私はマークダウンをあらかじめ確認しましたが、実際には累乗を表現する明確な方法であると考えられる上書きが可能です(可能な場合)。
追加された 著者 unwind,
@ArmenTsirunyan: 2(24) 2 ^ 24 または pow(2,24)です。 2(24)-1 は0xffffffです。型は符号なしの24ビット整数です。
追加された 著者 Guffa,

2 答え

0xffffff でマスキングすると、保存された値が決して0..2 ^ 24-1の範囲外になってしまうだけです。下位24ビット以外のものは破棄されます。

たとえば、値 -1 をマスクしてマスクすると、値は 0xffffff になります。値は変更されましたが、有効な範囲内です。

2
追加された

2**24-1 is 16777215 (here, I've used ** for the exponentiation).

0xFFFFFF is also 16777215.

言い換えれば、彼らは同じ価値を書く二つの方法です。

0xFFFFFF で何かを AND すると、下位24ビットを保持し、残りをゼロに設定します。

1
追加された
そして、同じものであると受け入れるように見えない人もいるので、「最下位24ビットを保持する」は、「減算モジュロ2 ** 24」(正または符号なしの値を仮定)と同じです。
追加された 著者 R..,