0

私はPHPからJavaを初めて使用するので、型を理解するのに時間/労力を費やしています。それから私はこれに出くわしました:

    Byte bb = new Byte("127");
        System.out.println(bb.byteValue());

    Short ss = new Short("32727");
        System.out.println(ss.shortValue());
        System.out.println(ss.byteValue());

出力 127、32727、および -41 ?

Short 32727 がバイトとして表されているときに、どのようにして -41 に達したかを誰かに説明してもらえますか?

4

2 に答える 2

4

32727 のバイナリ表現は です0111111111010111。その byteValue() は最小の 8 ビットなので、11010111

11010111は 1 で始まるので負です。

2 の補数を取る(各ビットを補ってから 1 を足す) と、1010012^5 + 2^3 + 2^0 = 32+8+1 = 41 になります。

したがって、-41 です。

于 2011-10-02T11:22:17.737 に答える
1

Java は符号付きの型しか認識しません。32727 を 8 ビット (モジュロ 256) に切り詰めると 215 になります。これは、符号付き 8 ビット数として解釈すると -41 になります (215 + 41 = 256 = 2 8 )。

型を署名するという選択は、Byte多くの批判を引き起こしました。なぜなら、基本的なシリアライゼーション操作に多くの微妙な点が追加されるためです。人々は一般的にint、まさにこの理由で型を好みます。

于 2011-10-02T11:21:06.327 に答える