-47对应的16进制数为1000002f还是f000002f??迷糊了 请大家帮忙

解决方案 »

  1.   

    对应 ffffffd1测试如下:
    System.out.println(Integer.toHexString(-47));
      

  2.   

    首位0 1是二进制的判断标识
    java中无有符号数 所以都是将数据对半分一半为正一半为负
    对于64bit 16进制数
    0x00000000~0x7fffffff是正数
    0x80000000~0xffffffff就是负数
      

  3.   

    补正 可以说java中基本无 无符号数(there's no unsigned),
    但16进制表示法某种程度上可以看成是unsigned type
      

  4.   

    如果是 32 位有符号 int 数的话,转成 16 进制,最高位的那一个数肯定是大于 7 的。先把 -47 转成二进制,转换方式:1,-47 把负号去掉,用 47 转成二进制为 101111
    2,将 101111 所有位(含最高的符号位)取反再加 1:   0000 0000 0000 0000 0000 0000 0010 1111
    ~ 1111 1111 1111 1111 1111 1111 1101 0000
    + 0000 0000 0000 0000 0000 0000 0000 0001
    ————————————————————————
       1111 1111 1111 1111 1111 1111 1101 0001即:0xFFFFFFD1