0

これが私の最初の質問です

これが私のコードです:

public class Bits{
   public static void main(String args[]){


   int i = 2 , j = 4;



   int allOnes = ~0;

   int left = allOnes << (j+1);

   System.out.println("Binary Equivalent at this stage: " +Integer.toBinaryString(left));

  }
}

以下は私が得ている出力です:

Binary Equivalent at this stage: 11111111111111111111111111100000

右辺から 8 ビットのみに制限するにはどうすればよいですか。つまり11100000

説明してください。

これが私の2番目の質問です:

また、上記の質問とはまったく異なる質問がもう 1 つあります。

public static void main(String args[]){


   int i = 2 , j = 4;



   int allOnes = ~0; // will equal sequence of all 1s

   int left = allOnes << (j+1);

   System.out.println("Binary Equivalent at this stage: " +Integer.toBinaryString(left));

  }
}

次の行が理解できなかったので:

int allOnes = ~0; // will equal sequence of all 1s

「allOnes」の値を出力しようとすると、「-1」が出力されました。

次のような非常に次の行を理解するのに苦労しています。

int left = allOnes << (j+1);
4

5 に答える 5

0
  1. バイト境界のみを気にする場合は、ByteBufferを使用します

    バイト lastByte = ByteBuffer.allocate(4).putInt(i).array()[3];

このバイトを最初の 4 ビットまたは最後の 4 ビットに制限するには、lastByte & 0b11110000またはを使用します。lastByte & 0b00001111

  1. -1 の整数表現はすべて 1 です。つまり、32 ビットがすべて 1 に設定されています。最初のビットは -2^31 (負の符号に注意)、後続の各ビットは 2^30、2^29 と考えることができます。など 2^0 + 2^1 + 2^2 ... + 2^30 - 2^31 = -1 を加算します。

ビット演算に関するこのチュートリアルを読むことをお勧めします。

于 2013-04-11T20:29:52.037 に答える
0
int allOnes = ~0;

整数 0 を取り、NOT 演算をビットごとに適用して、バイナリ表現ですべて 1 になるようにします。整数は2 の補数形式を使用します。これは、すべてのビットが 1 であるワードの値が -1 の値であることを意味します。

于 2013-04-11T20:27:41.027 に答える
0

10 進数の 8 ビットの最大値は 255 です。モジュロ (剰余) 除算演算子を使用して、この時点で 8 ビットに制限できます。例:

int yournum = 35928304284 % 256;

yournum長さは 8 ビットに制限されます。さらに、コメントで提案されているように、これを行うことができます:

int yournum = 3598249230 & 255;

これも同様に機能し、はるかに高速であるため、この場合は実際に好まれます。関連する両方のビットが 1 の場合、ビットごとの and 関数は 1 を返します。255 の最後の 8 ビットのみが 1 であるため、整数は暗黙的に 255 に制限されます。

2 番目の質問に答えるには: チルダはビットごとの反転演算子です。したがって、

int allOnes = ~0; 

すべて 1 の整数を作成します。2の補数の仕組みにより、その数値は実際には -1 を表します。

于 2013-04-11T20:28:37.293 に答える