web-dev-qa-db-ja.com

65535という数字に何か特別なものはありますか?

2¹⁶-1&2⁵=2⁵(または?明らかに?)

開発者から本日、ビット単位の65535&32とは何か、つまり2¹⁶-1&2⁵=と尋ねられました。最初は自発的に32と思ったのですが、簡単に思えたので数分考えて32と答えました。32が正解だったようですが、どうですか? 65535 =2¹⁶-1= 1111111111111111(ただし、この2進数はすべて-1(?)である必要があるため、正しくありません)、32 = 100000ですが、変換できませんでした。何かに答える。答え32は実際には簡単ですか?同じように2¹⁶-1&2⁵-1= 31ですか?開発者が正確に65535について質問したのはなぜですか?

私に評価を求められたバイナリは1111111111111111&100000でしたが、1111111111111111が-1ではない理由がわかりません。 -1にすべきではありませんか? 65535はオーバーフローを引き起こす数値であり、どのようにしてそれを知ることができますか?

10
Niklas

この場合、数値はnsigned整数として扱われます。これは、設定されたすべてのビットが-1を生成しないことを意味します(署名されている場合は、はい、正しいです)。したがって、16ビットセットはすべて65535になります。

興味深いことに、論理ビット操作を行う場合、署名された状態は重要ではありません。ビットはコンピュータの最下位のコンポーネントであるため、ビット自体は署名されていません。 exのビットがcpu操作で指定されている。レジスタは、署名付きまたは署名なしとして扱われます。

負の数は、数値が符号付きとして扱われる場合(最上位ビット(MSB)をtrueに設定することで生成されます(どちらの「サイド」、またはどの外部ビットが設定されるかは、CPUアーキテクチャによって異なります(ビッグエンディアン/リトルエンディアンなど)) )。

22
epistemex

それはisささいなことです。バイナリの65535はすべて1であるため、65535未満のXとANDすると、Xになります。

18
ggambett

質問の2番目の部分に答えます。 2-bit とタグ付けしたので、32ビットの65535は00000000000000001111111111111111、符号付きまたは符号なしのnot-1です。

10
Chris Kent