请解释输出。 Long.toHexString()

时间:2015-09-18 19:49:17

标签: java hex

当我运行以下代码时:

class Solution{
public static void main(String []argh){
    System.out.println( Long.toHexString( Byte.MIN_VALUE ) );
    System.out.println( Long.toHexString( (byte)Math.pow(2,7) );
    System.out.println( Long.toHexString( Byte.MAX_VALUE ) );
    System.out.println( Long.toHexString( (byte)Math.pow(2,63) -1 ) );

    System.out.println();
    System.out.println();

    System.out.println( Long.toHexString( Short.MIN_VALUE ) );
    System.out.println( Long.toHexString( (short)Math.pow(2,15) );
    System.out.println( Long.toHexString( Short.MAX_VALUE ) );
    System.out.println( Long.toHexString( (short)Math.pow(2,15) -1 ) );

    System.out.println();
    System.out.println();

    System.out.println( Long.toHexString( Integer.MIN_VALUE ) );
    System.out.println( Long.toHexString( (-1*(int)Math.pow(2,31)) ) );
    System.out.println( Long.toHexString( Integer.MAX_VALUE ) );
    System.out.println( Long.toHexString( (int)Math.pow(2,31) -1 ) );

    System.out.println();
    System.out.println();

    System.out.println( Long.toHexString( Long.MIN_VALUE ) );
    System.out.println( Long.toHexString( (-1*(long)Math.pow(2,63)) ) );
    System.out.println( Long.toHexString( Long.MAX_VALUE ) );
    System.out.println( Long.toHexString( (long)Math.pow(2,63) -1 ) );

    }
}

我得到以下输出:

ffffffffffffff80
80
7f
fffffffffffffffe

ffffffffffff8000
8000
7fff
ffffffffffff7fff

ffffffff80000000
ffffffff80000001
7fffffff
7ffffffe

8000000000000000
8000000000000001
7fffffffffffffff
7ffffffffffffffe

有人可以解释为什么HexStrings的长度会变化吗?我知道它是基本的,请解释答案。我很困惑。

修改|对不起,我对这个愚蠢的事感到困惑,我没想到。

1 个答案:

答案 0 :(得分:3)

因为它不包含前面的零。

例如,Byte.MAX_VALUE为127,表示为" 7f"。它可以作为" 000000000000007F"返回,但设计师必须决定更多的人在没有初始零的情况下想要它。

您可以看到此行为记录为here

  

此值转换为十六进制(基数为16)的ASCII数字字符串,没有额外的前导0

强调我的。

在评论中,您似乎对MIN_VALUE长度如此长的原因感到困惑。要解释此问题,请考虑Byte.MIN_VALUEBYTE.MAX_VALUEByte.MIN_VALUE为-128,Byte.MAX_VALUE为127.由于您将这些传递给Long.toHexString,其中long为其参数,它们会被上传到{{ 1}}Š。因此,最终转换为十六进制字符串的值是long值-128和127,使用Two's Complement表示为" ffffffffffffff80"和" 7f"分别