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


10

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はオーバーフローを引き起こす数値であり、どうすればそれを知ることができますか?


3
何か特別なものがあるに違いない。チェコのビールの国家規格である56 6635を思い出します。うーん...ビールの時間。
joshp

5
仮定が多すぎる:65535は、16ビットの2の補数演算でのみ-1を返します。16ビットの1の補数演算では-0を、32ビットの2の補数演算と1の補数演算では65535を返します。
mouviciel 2013年

3
TCPポートの上限です。
Renae Lider 2014年

回答:


22

この場合、数値は符号なし整数として扱われます。これは、すべてのビットセットが-1を生成しないことを意味します(符号付きの場合は、そうです、正しいでしょう)。したがって、16ビットセットはすべて65535になります。

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

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


9
最近のほとんどのマシンは、ビットを反転して1を追加することで負に変換します。2の補数です。1ビットを設定するだけで、+ 0と-0の問題が発生します。
James

1
それは必ずしも問題ではありません。結果の符号に関係なく、1の補数はゼロに向かって切り捨てられます。2の補数は-無限大に切り捨てられます。特定のアプリケーションでは、これにより問題が発生する可能性があります。
John R. Strohm

18

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


10

質問の2番目の部分に答えます。これをとしてタグ付けしたので、32ビットの65535は00000000000000001111111111111111、符号付きまたは符号なしで -1 ではありません

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.