0

前の質問を続ける なぜ私は長いから派生することができないのですか?

面白い問題を見つけました。

第一歩:

4294967296 & 0xFFFFFFFF00000000

結果:4294967296。

ステップ2。

4294967296 & 0x00000000FFFFFFFF

結果:0

ああ、だからここでは4294967296 == 0xFFFFFFFF

確認しよう

(long)0x00000000FFFFFFFF

結果:4294967295。失敗します。

再確認しましょう

4294967296 >> 32

結果:1。失敗します。

唯一の説明は、私がlongを使用しているため、一部のビットが符号用に予約されているということです。CIではunsignedlongを使用します。みんなどう思いますか?

4

3 に答える 3

5
4294967296 & 0xFFFFFFFF00000000 = 4294967296

これは、値4294967296の下位32ビットにビットが設定されていないことを示しています。実際、4294967296は0x100000000であるため、これは当てはまります。

4294967296 >> 32 = 1

繰り返しますが、一貫しています。

言い換えれば、4294967296が0xFFFFFFFFであるというあなたの結論は間違っているので、残りのチェックはこれをサポートしません。

于 2009-11-23T14:58:37.687 に答える
3

ええと...なぜあなたが結論に達したのかわかりませんが、4294967296は0x100000000です。ビット単位のANDを読みやすい16進数で書き出すには...

0x0000000100000000 &
0x00000000FFFFFFFF =
0x0000000000000000

0x0000000100000000 &
0xFFFFFFFF00000000 =
0x0000000100000000

それらの両方が完全に理にかなっています。おそらくあなたはビットごとに誤解しているでしょうそして...それは両方で同じビットをマップします。あなたのコメントは、ビット単位のANDよりもビット単位のXORに適しているようです(これは、使用している演算ではありません)...

于 2009-11-23T15:03:29.970 に答える
1

あなたはビットand演算を理解していないと思います。ビット単位andは、両方に設定されているビットを返します。2つが同じだった場合

(4294967296 & 0xFFFFFFFF00000000) == 4294967296

(4294967296 & 0xFFFFFFFF00000000) == 0xFFFFFFFF00000000

両方とも成り立つでしょうが、明らかにそうではありません。

于 2009-11-23T15:01:25.780 に答える