2011-06-26 9 views
1

java.math.BigInteger.BigInteger(byte [] val)コンストラクタがどのように機能するのか理解しようとしています。Java BigInteger(byte [] val)

たとえば、バイト配列[1、0]からBigIntegerインスタンスを作成すると、それが作成する対応する文字列は256です。確かに、バイナリ文字列10は、基数10の値2に対応します。 10〜256?私は何が欠けていますか?

答えて

4

アレイ内の各バイトは8ビットを表すので、[1, 0]バイナリで、1 * 2^(8 * 1) + 0 * 2^(8 * 0)と同等であるか、または:00000001 00000000

BigInteger(byte [])コンストラクタもtwo's complementを使用しているので、符号なし数値を加算するだけではなく、最上位ビットが符号に影響しますので注意してください。

4

これは、ベース-2ではなく、ベース256で効果的に機能しています。したがって、入力配列の各位置は、次の位置よりも256倍の価値があります。

の擬似コードは:

x = 0; 
for (i = 0; i < val.length - 1; i++) { 
    x = (x*256) + val[i]; 
} 
+0

何ですか? 「10」は「512」に値するという意味ではないでしょうか? –

+0

@Johanいいえ、 "10"は1 * 256 + 0を意味します。 – Howard

+0

@ Johan:最後の位置は1の単位です。最後から2番目の要素は256の単位です.3番目から最後の要素は256 * 256の単位です。 –