2

私の知る限り、2 の補数を使用し、最初の数値が 1 の場合、数値を反転して新しいバイトの値を見つけ、それを負にします。Javadoc によると、Integer.parseInt(String s, radix ) と Integer.valueOf(String s, radix) は両方とも符号付き整数オブジェクトを返す必要がありますが、これでテストすると:

System.out.println(Integer.parseInt("10000001", 2));

System.out.println(Integer.valueOf("10000001", 2));

私は得る:

129

129

私の計算では-127になりますが。興味深いのは

System.out.println(Integer.parseInt("-10000001", 2));

プリントアウト:

-129

バイト(および基数= 2)を入力すると、メソッドが正しく署名された値を返す別のJavaメソッドを知っている人はいますか?

4

5 に答える 5

7

常にバイトになる場合は、これでうまくいくはずです:

int i = Integer.parseInt("10000001", 2);
byte b = (byte) i;

整数値は 129 になりますが、バイトにキャストすると -127 に変わります。

于 2013-03-14T17:02:05.643 に答える
2

あなたが望んでいるのは

Integer.parseInt("1", 2) == -1?

文字列はいつでも 32 ビット整数として解析できます。値が 128 ~ 255 の場合は、手動で負の補数に変換してください。

于 2013-03-14T16:57:56.877 に答える
1

Integer.parseInt(String s,int radix)

文字列引数を、2 番目の引数で指定された基数の符号付き整数として解析します。文字列内の文字はすべて、指定された基数の数字でなければなりません (Character.digit(char, int) が負でない値を返すかどうかによって決定されます)。ただし、最初の文字は ASCII マイナス記号 '-' ('\u002D ') 負の値を示します。結果の整数値が返されます。

したがって、最初の文字が「-」でない限り、Integer.parseInt("anyvalue", 2) は値を返しません。

于 2013-03-14T16:56:55.883 に答える
0
public static void main(String[] args) {
    int i = -4;

    /* returns the string representation of the unsigned integer value 
    represented by the argument in binary (base 2) */

    String convertedString  = Integer.toBinaryString(i);

    System.out.println(convertedString);

    /* Converting the binary format string back to integer value */
    int foo = new BigInteger(convertedString, 2).intValue();

    System.out.println(foo);
} 
于 2014-11-27T17:28:05.817 に答える
0

これは、int 10000001 が -127 ではなく、int が 32 ビットであり、これが 31 番目であり、数値が負かどうかを決定するためです。10000001 が -127 だとすると、それは int ではなくバイトです。しかし、Byte.parseByte("10000001", 2) は 2 の補数表現を解析できず、NumberFormatException をスローします。Java SE で 2 の補数表現を解析する唯一の方法は、

byte b = new BigInteger("10000001", 2).byteValue();

これにより、予想される-127が生成されます

于 2013-08-29T11:01:40.233 に答える