以下のエディターは、Java バイト配列型 (byte[]) と int 型を変換する方法に関する記事を提供します。編集者はこれがとても良いと思ったので、参考として共有します。エディターに従って見てみましょう。コードは次のとおりです。
public class CommonUtils { //高位在前,低位在后 public static byte[] int2bytes(int num){ byte[] result = new byte[4]; result[0] = (byte)((num >>> 24) & 0xff);//说明一 result[1] = (byte)((num >>> 16)& 0xff ); result[2] = (byte)((num >>> 8) & 0xff ); result[3] = (byte)((num >>> 0) & 0xff ); return result; } //高位在前,低位在后 public static int bytes2int(byte[] bytes){ int result = 0; if(bytes.length == 4){ int a = (bytes[0] & 0xff) << 24;//说明二 int b = (bytes[1] & 0xff) << 16; int c = (bytes[2] & 0xff) << 8; int d = (bytes[3] & 0xff); result = a | b | c | d; } return result; } public static void main(String[] args){ int a = -64; System.out.println("-64="+Integer.toBinaryString(-64)); byte[] bytes = CommonUtils.int2bytes(a); for(int i = 0 ; i<4 ; i++){ System.out.println(bytes[i]); } a = CommonUtils.bytes2int(bytes); System.out.println(a); } }
実行結果は次のとおりです。
-64=11111111111111111111111111000000 -1 -1 -1 -64 -64
1:
-64は[10000000][00000000][00000000][01000000]としてバイナリの元のコードに変換されます元のコードを[11111111][11111111][11111111][11000000]として補数コードに変換しますそれはコンソールの出力結果と同じです。 java では、バイナリが 2 の補数形式で表現されていることがわかります
-64 >>> 24 (符号なし右シフト、上位ビットは 0 で埋められます) 以降は、 [ になります。 00000000][00000000][00000000][ 11111111]前のステップの結果に 0xff を追加しても、0xff の値は [00000000] なので、[00000000][00000000][00000000][11111111] となります。 ][00000000] [00000000][11111111], so & 0xff の目的は、下位 8 ビットを変更せずに保持し、残りの位置を 0
にし、結果を強制的にバイト型に変換し、下位ビットを保持することです。上位ビットを切り捨てて、[11111111] になることがわかります。前のステップの 0xff は、実際には必要ありません。ビットがどんなに上位であっても、最終的には切り捨てられますので、result[0] is [11111111]=-1 など:
result[1]为[11111111]=-1 result[2]为[11111111]=-1 result[3]为[11000000]=-64
説明 2:
byte[0] は [11111111] で、最初に byte[0] が int 型に変換されます (
Before)ディスプレイスメント演算では、byte 型が int 型に変換されます。正の数の場合は上位ビットに 0 が埋められ、負の数の場合は上位ビットに 1 が埋められます)、加算します。上位ビットに 1 を設定すると、[11111111][11111111][11111111][11111111]になります前のステップの結果と 0xff の後は、[00000000][00000000][00000000][11111111]になります
それでは前のステップの結果は << 24 (左シフト、0 による下位パディング) となり、これは [11111111][00000000][00000000][00000000] = a同様に、b、 c, d
a | b | c | d は、バイトを int に変換するときに、パディングが a | b | c | d に影響を与えないことがわかります。 0に設定)、& 0xffが必要です
shortとbyte[]の間の変換、longとbyte[]の間の変換も同様です 追記:1、int型は4を占めますバイト型は 1 バイトのみを占有します
2、元のコード: 最上位ビットは符号ビットで、残りのビットは数値サイズを表すために使用されます。 2 の元のコードは次のとおりです: 00000010- 2. 元のコード: 100000103、補数コード: 正の数 補数コードは元のコードと同じです。
負の数の補数コードの符号ビットは変更されず、残りのビットはそのままです。ビットごとに反転された
2 の補数コード: 00000010
-2 の補数コード: 111111014 、補数: 正の数の補数は元のコードと同じです。負の数は負の数の補数 + 1
2の補数: 00000010-2の補数: 11111110
以上がJavaの詳しい入門書です バイト配列型(byte[ ]) と int 型の詳細については、PHP 中国語 Web サイト (m.sbmmt.com) に注目してください。