在将短片转换为字节时会发生什么?

时间:2011-10-02 11:16:28

标签: java byte type-conversion short

我是PHP的新手,因此花费一些时间/精力来理解类型。然后我遇到了这个:

    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的吗?

2 个答案:

答案 0 :(得分:4)

32727的二进制表示为0111111111010111。 byteValue()只是最小的8位,所以11010111

11010111为负数,因为它以1开头。

Two's complement(补充每一位,然后加一)得到101001,即2 ^ 5 + 2 ^ 3 + 2 ^ 0 = 32 + 8 + 1 = 41

所以我们有-41。

答案 1 :(得分:1)

Java只知道签名类型。当你将32727截断为8位(即模256)时,得到215,当解释为带符号的8位数时,它是-41(215 + 41 = 256 = 2 8 )。

签署Byte类型的选择引起了很多批评,因为它为基本序列化操作增加了许多微妙之处,因此人们通常更喜欢int类型。