0

の背後にある論理に疑問がありx &(~0 <<n)ます。
まず意味が分からなかった~0。Javaでこれを試したところ、-1. -12 進数で表し、それを正の数と区別するにはどうすればよいでしょうか?

4

2 に答える 2

2

負の数を表す最も一般的な方法 (および Java が使用する方法) は、2 の補数と呼ばれます。私のコメントで述べたように、このシステムでマイナスを計算する 1 つの方法は-x = ~(x - 1). もう 1 つの同等の方法は、 です-x = ~x + 1

たとえば、8ビットでは、

 00000001  // 1
 00000000  // 1 - 1
 11111111  // ~(1 - 1) = ~0 = -1

に 1 を11111111加えると 0 になります。「1 を加えると 0 になるような数」から 1 を引いたものと呼ぶのが理にかなっています。

最上位ビットが設定された数値は負と見なされます。

私がリンクしたウィキペディアの記事には、より多くの情報が含まれています。

についてはx & (~0 << n)~0「すべてのもの」を表す方法にすぎません (これはたまたま -1 であり、この使用には実際には関係ありません)。ほとんどnの場合、左にシフトされた「すべて1」は、ゼロnが続く一連の1です。n

全体として、その式は の下位nビットをクリアしますx。少なくとも、0 <= n <= 31.

a << nJava では、 は でaありint、 は と同等a << (n & 31)です。

于 2013-06-21T15:29:14.417 に答える
0

バイト 0 のすべてのビットは 0 であり、-1 のすべてのビットは 1 であるため、0 のビットごとの否定は -1 です。

したがって、~0 は -1 です。

質問の残りの部分については、実際に何を求めていますか?

于 2013-06-21T14:51:13.753 に答える